【发布时间】:2013-12-19 19:41:19
【问题描述】:
考虑以下命题逻辑语法:
<A> ::= <B> <-> <A> | <B>
<B> ::= <C> -> <B> | <C>
<C> ::= <D> \/ <C> | <D>
<D> ::= <E> /\ <D> | <E>
<E> ::= <F> | -<F>
<F> ::= <G> | <H>
<G> ::= (<A>)
<H> ::= p | q | r | ... | z
连接词的优先级是:-、/\、/、->、。
还考虑了关联性,例如p\/q\/r 应该与p\/(q\/r) 相同。其他连接件也一样。
我假装在 java 中制作了一个自上而下的预测解析器。我在这里没有看到歧义或直接左递归,但不确定这是否就是我需要考虑的全部 LL(1) 语法。也许是非直接左递归?
如果这不是 LL(1) 语法,根据我的意图转换它所需的步骤是什么?
【问题讨论】:
-
这不是一个真正的编程问题,是吗?
-
请定义“编程问题”。
-
一个编程问题会更关心代码来做你所问的,而不是你所问的。你的问题是元,如果有的话。
-
好吧,也许这更像是一个“理论问题”。
-
我会将其归档在 Logic 或 Math 下(数学交流似乎有一些逻辑线程)。无需定义,他们已经在帮助中心定义了。