gpt4 book ai didi

perl - Parse::RecDescent:解析嵌套算术表达式?

转载 作者:行者123 更新时间:2023-12-01 09:52:23 25 4
gpt4 key购买 nike

目前我用它来解析算术表达式:

expr  : '(' expr ')' 
| number op expr
| variable op expr
| number
| variable
| <error>

它适用于简单的表达式,但不能处理嵌套的括号表达式。知道如何扩展/修改它以便它可以处理嵌套表达式。

例如这行得通:

5 + 12
33 - $var
13 + 2 * $v
( 44 + 98 )

但这不起作用:

( 44 + 98 ) / 2
( 44 + 98 ) / ( 5 + $var2 )
( 11 + 5 ) * ( 3 + ( $v * 2 ) )

最佳答案

您的优先链有问题。 1 + (2 + 3)可以解析为number op expr,右边的expr'('expr' )',但是(1 + 2) + 3不行,因为expr不能出现在op的左边>。当然你不能直接添加它,因为左递归是被禁止的。您需要做的是将其分解为:

expr: term '+' expr
| term '-' expr
| term

term: factor '*' term
| factor '/' term
| factor

factor: '(' expr ')'
| number
| variable
| <error>

是的,括号一直在链的末端,这可能看起来很奇怪,但它的意思是括号内的表达式可以出现在因子可以出现的任何地方,并且会在它冒泡之前被评估。现在很容易看出,由于所有内容都引用 factor,所以带括号的表达式可以出现在任何需要的地方。

关于perl - Parse::RecDescent:解析嵌套算术表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35397507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com