2017-07-28 48 views
0

我正在爲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.yysrc/lib/compiler/scanner.ll

他們完成它的方式是使用詞法分析器中的尾隨上下文,例如, r/s。在ANTLR中做到這一點的方式是here,但我無法使它工作。

我需要它以這種方式工作,因爲語法的另一部分取決於這種機制 - 相關的代碼片段here

您可以通過克隆my repo並運行make來重新創建我的特定問題 - 這會在解析階段給出令牌lexed列表和錯誤。在令牌列表中,字母T被勒索爲令牌'T',而不是ID,因爲我希望它是。

我覺得在ANTLR中有更多的自然/正確的方法來做到這一點,但是我對此很陌生,並且無法想出辦法。

PS如果你有一個想法如何更好地命名這個問題,請編輯它。

回答

1

如果我理解正確的問題,下面的代碼將正常工作:

grammar temp; 

input: t | id; 
t:  T '('; 
id: ID | T; 

T:  'T'; 
LPAREN: '('; 
ID: [a-zA-Z][a-zA-Z0-9._]*; 
+0

它的工作,謝謝! – tales