python import ply.lex as lex import ply.yacc as yacc tokens = ( 'NUMBER', 'PLUS', 'TIMES', ) t_PLUS = r'\+' t_TIMES = r'\*' t_ignore = ' \t ' def t_NUMBER(t): r'\d+' t.value = int(t.value) return t def t_error(t): print(f"Unexpected character: {t.value[0]}") t.lexer.skip(1) lexer = lex.lex() def p_expression_plus(p): 'expression : expression PLUS term' p[0] = p[1] + p[3] def p_expression_term(p): 'expression : term' p[0] = p[1] def p_term_times(p): 'term : term TIMES factor' p[0] = p[1] * p[3] def p_term_factor(p): 'term : factor' p[0] = p[1] def p_factor_number(p): 'factor : NUMBER' p[0] = p[1] def p_error(p): print("Syntax error") parser = yacc.yacc() result = parser.parse("2 + 3 * 4") print(result)


上一篇:
下一篇:
切换中文