首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LALR语法不明确

LALR语法不明确
EN

Stack Overflow用户
提问于 2013-03-24 04:55:47
回答 1查看 435关注 0票数 0

我已经制作了布尔和算术表达式的语法。我想要处理这样的算术表达式:

代码语言:javascript
复制
(1+5)+(-3)   

我已经完成了这项工作:我可以处理所有我想要的表达式。

我的问题是布尔表达式可能是这样的:

代码语言:javascript
复制
( ( (2+2==4) or (3>2) ) and 2==2)

所以在某些时候,我的布尔规则必须引用我的算术表达式规则。我不能在我的布尔规则中使用括号(),因为它会导致我的语法不明确。我明白为什么,但是我想不出解决这个问题的办法。

EN

回答 1

Stack Overflow用户

发布于 2013-05-01 19:23:05

这篇为GOLD编写的LALR语法应该能让你入门:

代码语言:javascript
复制
<Formula>     ::= <BoolConcat> <Formula> | <BoolConcat> 

<BoolConcat> ::= <BoolConcat> 'and' <Comparison> | <Comparison>

<Comparison> ::=  <Comparison> '>' <Expression> | <Expression> 

<Expression> ::= <Expression> '+' <Term> | <Term>

<Term> ::= <Term> '*' <Fact> | <Fact>

<Fact> ::= Integer | '(' <BoolConcat> ')'

对于bool部分,将重用算术语法的典型概念。没有什么新的东西,只是不同类型的布尔运算符的优先级有了新的提升。

只需在比较中添加'==‘,在BoolConcat中添加'or’,依此类推。

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

https://stackoverflow.com/questions/15591961

复制
相关文章

相似问题

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