我無法在Internet上找到有關LL(*)解析器(如ANTLR)的任何完整描述。LL(*)解析器如何工作?
我不知道是什麼的LL(K)分析器和LL(*)一個,爲什麼他們不能支持左recusrive語法,儘管它們的靈活性之間的差異。
我無法在Internet上找到有關LL(*)解析器(如ANTLR)的任何完整描述。LL(*)解析器如何工作?
我不知道是什麼的LL(K)分析器和LL(*)一個,爲什麼他們不能支持左recusrive語法,儘管它們的靈活性之間的差異。
下面是一篇文章(由特倫斯·帕爾的antlr作者)約LL(*)
語法分析:article用的是什麼LL(*)
但不LL(k)
,對於任何一個k
很好的例子。
另一個很好的參考(和更完整)是"Definitive ANTLR Reference",再由特倫斯·帕爾,和原來的journal article描述如何antlr工作[pdf]。
當過你看到這個一般的令牌數量,以解析語言向前看。
這是LR分析器同樣的事情。
所以k是令牌,該parer會作出決定之前獲取的最大掛載。 請注意,除非使用生成器(ANTLR,yacc,bison,...),否則解析器將越難解碼得越高。
LL解析器使用自上而下的方式這意味着它會尋找最深的樹。 因爲這個左遞歸會構成一棵無限深的樹並且會破壞解析器。
據我所知大多數語言使用LR分析器。