Ply示例计算器多个表达式

时间:2016-08-23 20:08:15

标签: python parsing lexer ply

我一直在尝试Ply example calculator from Github

当我运行计算器时,它在REPL中运行。我将如何使用Ply一个接一个地评估多个表达式。

例如,如果我输入3+4,则REPL执行此操作:

calc > 3+4
7
calc >

如果我输入4+3 6+2,则REPL执行此操作:

calc > 4+3 6+2
Syntax error at '6'
2
calc >  

如何修改示例计算器以使REPL能够执行此操作:

calc > 4+3 6+2
7
8
calc > 

我是否需要修改语法,解析器或两者?我已经尝试修改语法,使其保持递归,但它似乎不起作用。

1 个答案:

答案 0 :(得分:1)

样本计算器的语法允许使用- 42(或-(4*8)+7)之类的表达式。如果这样的表达式是一行上的第二个表达式,则会产生歧义。是:

calc > 4 * 3 -(4*8)+7

一个或两个表达式?

使语法明确无误的一种方法是允许在用逗号分隔的行上使用多个表达式。你可以通过将'.'添加到文字标记列表并放置函数来实现这一点

def p_line(p):
    '''line : statement
            | line ',' statement'''
    pass

作为第一个解析器函数(即在p_statement_assign之前。

随着这一变化:

$ python calc.py
Generating LALR tables
calc > 2+3
5
calc > 2+3,4+6
5
10
calc > 2,3
2
3
calc > a=2,a+7
9