首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PetitParser评估器工作不正常

PetitParser评估器工作不正常
EN

Stack Overflow用户
提问于 2017-02-03 22:33:51
回答 1查看 72关注 0票数 1

当我尝试在法罗上运行这段代码时,我的答案就有点不一样了。我试着评估1-2+3,但出于某种原因,它做了1- (2+3),我不明白为什么会这样。耽误您时间,实在对不起。

代码语言:javascript
复制
number :=  #digit asParser plus token trim ==> [ :token | token inputValue asNumber ].

term := PPUnresolvedParser new.
prod := PPUnresolvedParser new.
term2 := PPUnresolvedParser new.
prod2 := PPUnresolvedParser new.
prim := PPUnresolvedParser new.

term def: (prod , $+ asParser trim , term ==> [ :nodes | nodes first + nodes last ]) / term2.

term2 def: (prod , $- asParser trim , term ==> [ :nodes | nodes first - nodes last ])/ prod.

prod def: (prim , $* asParser trim , prod ==> [ :nodes | nodes first * nodes last ])/ prim.

prod2 def: (prim , $/ asParser trim , prod ==> [ :nodes | nodes first / nodes last ])/ prim.

prim def: ($( asParser trim , term , $) asParser trim ==> [ :nodes | nodes second ]) / number.

start := term end.

start parse: '1 - 2 + 3'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-04 02:27:06

考虑term的定义

代码语言:javascript
复制
term
    def: prod , $+ asParser trim , term
        ==> [:nodes | nodes first + nodes last]
        / term2.

/ term2部件是介于

代码语言:javascript
复制
prod , $+ asParser trim, term ==> [something]

代码语言:javascript
复制
term2 

让我们从精神上解析'1 - 2 + 3',根据term

我们首先阅读了$1,并必须在上面的两个选项之间做出决定。第一个问题将失败,除非prod消耗'1 - 2'。但这是不可能的因为

代码语言:javascript
复制
prod
    def: prim , $* asParser trim , prod
        ==> [:nodes | nodes first * nodes last]
        / prim.

prim
    def: $( asParser trim , term , $) asParser trim
        ==> [:nodes | nodes second]
        / number

没有$*$(出现,'1 - 2'也没有被#number解析。

因此,我们尝试使用term2,它是以类似的方式定义的

代码语言:javascript
复制
term2
    def: prod , $- asParser trim , term
        ==> [:nodes | nodes first - nodes last]
        / prod.

所以现在我们在两个选项之间有一个OR

如前所述,第一个选项失败,因此我们接下来尝试prod,然后是prim,最后是numbernumber解析器以

代码语言:javascript
复制
#digit asParser plus 

它消耗数字$1并生成整数1

我们现在回到term2。我们消费' - ',剩下的是'2 + 3';根据term的说法,这会产生5。所以我们得到了1 - 5 = -4

短解释

要让term解析为(1 - 2) + 3prod应该使用1 - 2,这是因为prod不涉及$-

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42034072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档