Guest User

Untitled

a guest
Jan 19th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. import ply.lex as lex
  2. import ply.yacc as yacc
  3.  
  4. # List of token names. This is always required
  5. tokens = (
  6. 'VARIABLE',
  7. 'OR',
  8. 'AND',
  9. 'PAR_OPEN',
  10. 'PAR_CLOSE',
  11. )
  12.  
  13. # Regular expression rules for simple tokens
  14. t_ignore = ' t'
  15. t_VARIABLE = r'b[a-z]+b'
  16. t_OR = r'bORb'
  17. t_AND = r'bANDb'
  18. t_PAR_OPEN = r'('
  19. t_PAR_CLOSE = r')'
  20.  
  21. def t_error(t):
  22. print("Illegal character '%s'" % t.value[0])
  23. t.lexer.skip(1)
  24.  
  25. # Build the lexer
  26. lexer = lex.lex()
  27.  
  28. def p_term(p):
  29. '''term : VARIABLE OR VARIABLE
  30. | VARIABLE AND VARIABLE
  31. | PAR_OPEN VARIABLE AND VARIABLE PAR_CLOSE'''
  32.  
  33. if p[2] == 'AND':
  34. p[0] = "".join([p[1], p[3]])
  35.  
  36. for idx, val in enumerate(p):
  37. print(idx, val)
  38.  
  39. def p_error(p):
  40. print("Syntax error in input!")
  41. print(p)
  42.  
  43.  
  44. parser = yacc.yacc()
  45. res = parser.parse("(a AND b)")
  46. print(res)
  47.  
  48. expression : expression + term
  49. | expression - term
  50. | term
  51.  
  52. term : term * factor
  53. | term / factor
  54. | factor
  55.  
  56. factor : NUMBER
  57. | ( expression )
Add Comment
Please, Sign In to add comment