2
A
回答
2
是的,你可以在詞法規則裏面使用遞歸。
採取下面的例子:
${a ${b} ${c ${ddd} c} a}
這將正確地由以下語法解析:
parse
: DollarVar
;
DollarVar
: '${' (DollarVar | EscapeSequence | ~Special)+ '}'
;
fragment
Special
: '\\' | '$' | '{' | '}'
;
fragment
EscapeSequence
: '\\' Special
;
作爲內部ANTLRWorks解釋示出了:
0
ANTLR的詞法分析器支持遞歸,正如@BartK在他的文章中熟練地指出的那樣,但在分析器中只能看到一個單一的標記。如果您需要解釋該令牌中的各個部分,您可能需要在解析器中處理它。
IMO,你會更好的解析器做的事情:
variable: DOLLAR LBRACE id variable id RBRACE;
通過做一些像上面,你會看到所有必要的片,可以建立一個AST或其他相應處理。
相關問題
- 1. ANTLR 4詞法分析器記號
- 2. 左遞歸ANTLR語法
- 3. ANTLR遞歸
- 4. ANTLR如何使用遞歸
- 5. Antlr左遞歸問題
- 6. mismatchedtoken ANTLR的語法謂詞
- 7. ANTLR語法謂詞JAVACC
- 8. ANTLR:詞法投擲NoViableAltException
- 9. ANTLR - 左遞歸刪除幫助
- 10. ANTLR的:相互左遞歸規則
- 11. 解決ANTLR相互左遞歸規則
- 12. 利用ANTLR 4的左遞歸消歧
- 13. 遞歸記錄
- 14. Antlr Lexer引用字符串謂詞
- 15. 問題ANTLR的語法(詞法)
- 16. ANTLR - 爲詞法分析規則發出多個標記
- 17. Python - 遞歸單詞列表
- 18. 最長的單詞遞歸
- 19. ANTLR:乘法省略'*'符號
- 20. 遞歸java星號
- 21. 遞歸號印刷
- 22. 記憶化遞歸
- 23. 汞忘記遞歸
- 24. 遞歸記錄oracle
- 25. JSP標記遞歸
- 26. 錦標賽括號的遞歸算法
- 27. 尾遞歸方法多2號
- 28. 帶記憶的尾遞歸pow()算法?
- 29. ANTLR的語法謂詞不匹配
- 30. 定義關鍵詞在ANTLR語法
不太。在。ANTLR中,'。*'和'。+'默認是非貪婪的。試試ANTLRWorks中的字符串'$ {a $ {b} c}'的解釋器。你會發現它匹配'$ {a $ {b}'而不是整個字符串'$ {a $ {b} c}'。請參閱Parr的ANTLR參考文獻,第4章,**擴展的BNF Subrules **,第86頁。 – 2010-03-31 20:59:42
@BartK我現在明白了。感謝您的澄清。 – 2010-03-31 22:18:08
不客氣! – 2010-04-01 05:25:16