簡體   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