Ply 示例计算器多个表达式
Ply example calculator multiple expressions
我一直在试用 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 >
我是否需要修改语法和/或解析器?我试过修改语法使其保持递归,但它似乎不起作用。
示例计算器的语法允许像 - 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
我一直在试用 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 >
我是否需要修改语法和/或解析器?我试过修改语法使其保持递归,但它似乎不起作用。
示例计算器的语法允许像 - 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