[英]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的兩個截然不同的產生,滿足以下條件:
a
,C和D都不能得出以a
開頭的字符串。 此規則是為了使在解析此代碼時沒有沖突。 當解析器遇到(
,它將不知道使用哪個生產。
您的語法違反了第一條規則。 同一生產右手邊的所有非終結符,即所有C和D最終都歸結為G和H,因此它們全部派生至少一個以(
開頭的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.