繁体   English   中英

这是LL(1)语法吗?

[英]Is this a LL(1) grammar?

考虑以下命题逻辑语法:

<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)语法,那么出于我的意图将其转换需要采取哪些步骤?

不是LL(1)。 原因如下:

LL(1)语法的第一条规则是:

只有当A --> C | D时,语法G才是LL(1) A --> C | D A --> C | D是G的两个截然不同的产生,满足以下条件:

  1. 对于没有终端a ,C和D都不能得出以a开头的字符串。

此规则是为了使在解析此代码时没有冲突。 当解析器遇到( ,它将不知道使用哪个生产。

您的语法违反了第一条规则。 同一生产右手边的所有非终结符,即所有C和D最终都归结为G和H,因此它们全部派生至少一个以(开头的字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM