如何使用PLY模块实现“ 1 + 1 \ n 2 + 2”的两行语法分析,分别输出2和4

时间:2019-01-07 10:23:06

标签: yacc

通过PLY实现“ 1 + 1 \ n 2 + 2”结果分析,我认为这是两个不相关的陈述,但是PLY减少了它们,如何使其不相关     def p_statement_expr(p):         声明:表达         打印p [1]

def p_expr_num(p):
    '''expression : NUMBER'''
    p[0] = p[1]

if "__main__" == __name__:
    parser = yacc.yacc(tabmodule="parser_main")
    import time
    t = time.time()
    for i in range(1):
        result = parser.parse("1+1 \n 2+2", debug=debug)
    # print time.time() - t
    # print result
  • 通过PLY实现“ 1 + 1 \ n 2 + 2”结果分析,我认为这是两个不相关的陈述,但是PLY减少了它们,如何使其不相关
  • PLY:PARSE DEBUG START状态:0堆栈:。 LexToken(NUMBER,1,1,0)动作:Shift和goto状态3状态:3堆栈:NUMBER。 LexToken(ADD,'+',1,1)操作:使用[1]并转到状态5减少规则[expression-> NUMBER]结果:(1)状态:5 Stack:expression。 LexToken(ADD,'+',1,1)动作:Shift和goto状态9状态:9堆栈:表达式ADD。 LexToken(NUMBER,1,1,2)操作:Shift和goto状态3状态:3堆栈:表达式ADD NUMBER。 LexToken(NUMBER,2,2,6)错误:错误:表达式ADD NUMBER。 LexToken(NUMBER,2,2,6)
  • 当报告2 + 2时,如何执行多行语句执行并在执行后自动执行以下代码?

1 个答案:

答案 0 :(得分:0)

Ply对第二个表达式没有做任何事情。

您的语法完全匹配一个陈述,假设您将其全部显示出来。 Ply希望输入在该时刻终止,但事实并非如此,因此Ply抱怨输入了意外的数字。