0
我有以下簡單ANTLR語法:簡單的語法無法解析
grammar Grammar;
grammarRules : grammarRule+ ;
grammarRule:
lhs '->' WORD+
;
lhs: ID ;
WORD : LETTER+ ;
ID : LETTER (LETTER|'0'..'9')* ;
fragment
LETTER : [a-zA-Z\u0080-\u00FF_] ;
WS : [ \t] -> skip ;
當我嘗試解析字符串「網頁 - >谷歌搜索」,我得到的錯誤:
line 1:0 mismatched input 'webpage' expecting ID
好吧,看起來更大的一點是,詞法分析器作爲完全不同於解析器步驟的自己的層運行,因此詞法分析器有責任確定在出現歧義時應該怎麼做。在這方面,我很好奇爲什麼添加一個語句終結者來解決歧義問題。 –
@DanielBigham你是對的。這可能還不夠。你必須做一些事情,比如'lhs - > ID | WORD'。由於ANTLR解析器是LL(*),所以您可能不需要行終止符。 (如果他們只是LL(1)) – Gene
對於後來可能會發現這種情況的其他人 - 我用Antlr拉着我的頭髮出現各種奇怪的行爲,然後我讀了一些關於重構我的語法的東西,以便主要語法包含在一個單一的規則中,而不是用不同的符號分解成許多規則。這顯然可以使語法的左遞歸得到更好的處理。 Presto現在運行良好。 –