考虑命题逻辑的以下语法:
<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) 语法,那么根据我的意图转换它所需的步骤是什么?