首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PetitParser定义左联想解析器

用PetitParser定义左联想解析器
EN

Stack Overflow用户
提问于 2013-01-28 21:33:20
回答 2查看 106关注 0票数 5

http://pharobooks.gforge.inria.fr/PharoByExampleTwo-Eng/latest/中,定义了ExpressionGrammar。但是,它是右关联的。

代码语言:javascript
复制
parser parse: '1 + 2 + 6'.    ======> #(1 $+ #(2 $+ 6))

我怎样才能使它成为左关联的呢?

代码语言:javascript
复制
parser parse: '1 + 2 + 6'.

结果:

代码语言:javascript
复制
#(#(1 $+ 2) $+ 6)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-28 22:24:31

对于左联想语法,请使用:

代码语言:javascript
复制
term := (prod sepratedBy: $+ asParser trim) foldLeft: [ :a :op :b |

...]

对于正确的联想语法,请使用:

代码语言:javascript
复制
raise := (prod sepratedBy: $^ asParser trim) foldRight: [ :a :op :b |

...]

或者,您可能想要查看PPExpressionParser,它会自动为您处理所有细节。您只需告诉它哪些运算符是左关联、右关联、前缀或后缀运算符。请看一下课堂评论以进行深入的讨论。

票数 7
EN

Stack Overflow用户

发布于 2013-01-28 21:38:34

看看PPExpressionParser类。

它就是为此而设计的,在class注释中有一个很好的例子

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

https://stackoverflow.com/questions/14563188

复制
相关文章

相似问题

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