Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import ply.lex as lex
- import ply.yacc as yacc
- # List of token names. This is always required
- tokens = (
- 'VARIABLE',
- 'OR',
- 'AND',
- 'PAR_OPEN',
- 'PAR_CLOSE',
- )
- # Regular expression rules for simple tokens
- t_ignore = ' t'
- t_VARIABLE = r'b[a-z]+b'
- t_OR = r'bORb'
- t_AND = r'bANDb'
- t_PAR_OPEN = r'('
- t_PAR_CLOSE = r')'
- def t_error(t):
- print("Illegal character '%s'" % t.value[0])
- t.lexer.skip(1)
- # Build the lexer
- lexer = lex.lex()
- def p_term(p):
- '''term : VARIABLE OR VARIABLE
- | VARIABLE AND VARIABLE
- | PAR_OPEN VARIABLE AND VARIABLE PAR_CLOSE'''
- if p[2] == 'AND':
- p[0] = "".join([p[1], p[3]])
- for idx, val in enumerate(p):
- print(idx, val)
- def p_error(p):
- print("Syntax error in input!")
- print(p)
- parser = yacc.yacc()
- res = parser.parse("(a AND b)")
- print(res)
- expression : expression + term
- | expression - term
- | term
- term : term * factor
- | term / factor
- | factor
- factor : NUMBER
- | ( expression )
Add Comment
Please, Sign In to add comment