Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.02 KB | None | 0 0
  1. assign(assign(ID, equals, EXPR, semicolon)) --> id(ID), equals, expr(EXPR), semicolon.
  2.  
  3. assign([E|Es]) --> assign(E), assign(Es).
  4.  
  5. semicolon --> [';'].
  6.  
  7. equals --> [=].
  8.  
  9. id(id(ID)) --> [ID], { atom(ID) }.
  10.  
  11. expr(expr(TERM, ADD_SUB, EXPR)) --> term(TERM), operator(ADD_SUB), expr(EXPR).
  12.  
  13. expr(expr(TERM)) --> term(TERM).
  14.  
  15. term(term(FACTOR, MULT_DIV, TERM)) --> factor(FACTOR), operator(MULT_DIV), term(TERM).
  16.  
  17. term(term(FACTOR)) --> factor(FACTOR).
  18.  
  19. factor([factor, LEFT, EXPR, RIGHT]) --> paren(LEFT), expr(EXPR), paren(RIGHT).
  20.  
  21. factor(factor(INT)) --> value(INT).
  22.                
  23. operator(ADD_SUB) --> [ADD_SUB], { memberchk(ADD_SUB, [+, -]) }.
  24.  
  25. operator(MULT_DIV) --> [MULT_DIV], { memberchk(MULT_DIV, [*, /]) }.
  26.  
  27. paren(PARA) --> [PARA], { memberchk(PARA, ['(', ')']) }.
  28.  
  29. value(int(INT)) --> [INT], {integer(INT)}.
  30.  
  31. value(symbol(SYMBOL)) --> [SYMBOL], {atom(SYMBOL)}.
  32.  
  33.  
  34. parse(ParseTree, Program, []):-
  35.     write(Program),
  36.     assign(ParseTree,Program,[]),
  37.     write('Parser output:\n'), write(ParseTree), write('\n').
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement