我正在爲BUGS使用ANTLRv4語法 - 我的回購是here,鏈接指向特定的提交,因此不應過時。ANTLR:尾隨括號的不同令牌
下面的最小代碼示例。
我想輸入規則沿着t
路線去,如果輸入爲T(
,但沿着id
路線去,如果輸入的是T
下面的語法。得到BUGS語法
grammar temp;
input: t | id;
t: T '(';
id: ID;
T: 'T' {_input.LA(1)==(}?;
ID: [a-zA-Z][a-zA-Z0-9._]*;
我ANLTRv4規範重激發與FLEX + BISON詞法和解析語法JAGS 4.3.0 source code併入,在文件src/lib/compiler/parser.yy
和src/lib/compiler/scanner.ll
。
他們完成它的方式是使用詞法分析器中的尾隨上下文,例如, r/s
。在ANTLR中做到這一點的方式是here,但我無法使它工作。
我需要它以這種方式工作,因爲語法的另一部分取決於這種機制 - 相關的代碼片段here。
您可以通過克隆my repo並運行make
來重新創建我的特定問題 - 這會在解析階段給出令牌lexed列表和錯誤。在令牌列表中,字母T
被勒索爲令牌'T'
,而不是ID
,因爲我希望它是。
我覺得在ANTLR中有更多的自然/正確的方法來做到這一點,但是我對此很陌生,並且無法想出辦法。
PS如果你有一個想法如何更好地命名這個問題,請編輯它。
它的工作,謝謝! – tales