我一直试图解析连接的字符串,以便也可以将表达式连接起来形成字符串。那是,
"No, " + 4*(6+5)/(8-4) + " is not equal to " + 75*1.3 + "."
以上内容应正确分析。问题是+
会导致转移-减少冲突。我一直在使用以下语法;
<S> ::= <A> '+' <S>
| <A>
<A> ::= <E>
|QUOT
<E> ::= <T> '+' <E>
| <T> '-' <E>
| <T>
<T> ::= <F> '*' <T>
| <F> '/' <T>
| <F>
<F> ::= NUM
| '(' <E> ')'
我还没有成功地找到一种语法,+
不会导致移位-减少冲突。我希望有一种方法来使这个语法LALR,我将非常感谢一些帮助,试图找到它。
发布于 2013-08-01 21:39:22
如果:
+
运算符(添加或连接)如何关联;以及那就有个解决办法。我更多地认为这是一次智力练习,而不是一种实际的解决方案,部分原因是上述要求具有高度的限制性,部分原因是我认为你不应该使用相同的操作符,有两个不同的先例。(事实上,我并不是使用+
进行连接的主要支持者。它是完全不同的,它应该有自己的象征。)
下面的解决方案很难确保字符串表达式与算术表达式的区别,因为算术表达式要求字符串表达式不能以(
开头。为了避免级联的过早减少,它将+
的级联版本关联到右侧,而添加版本与左侧的关联保持正常。
S : E '+' A
| E
| A
;
A : QUOT '+' S
| QUOT
;
E : E '+' T
| E '-' T
| T
;
T : T '*' F
| T '/' F
| F
;
F : NUM
| '(' E ')'
;
https://stackoverflow.com/questions/17994873
复制相似问题