2012-05-11 41 views
1

第一條規則從不起作用。它應該處理類似'ID1.ID2.ID3.ID4.ID5'的東西。 但其他規則按預期工作。它有什麼問題?句法謂詞不起作用

grammar testInt; 

data_source: 
    (ID '.' ID '.' ID ('.' ID)+)=>program_ref 
    | (ID '.' ID '.' ID)=>var_ref 
    | (ID '.' ID)=>program_ref 
    | resource; 

program_ref: ID ('.' ID)+; 
var_ref: ID '.' ID '.' ID; 
resource: ID; 

ID: (LETTER | ('_'(LETTER | DIGIT))) ('_'? (LETTER | DIGIT))*; 
WSFULL:(' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}; 

fragment LETTER: (('a'..'z') | ('A'..'Z')); 
fragment DIGIT: '0'..'9'; 

回答

1

似乎ANTLR首先嚐試program_ref之前匹配var_ref,因爲後者可以潛在匹配僅2 ID的其中var_ref比賽3和解析器貪婪地匹配令牌。

我認爲這只是一個虛擬的(你的一部分)語法:是否有你想要解決的現實世界問題?

+0

是的,它是結構化文本語言的真正問題的簡化版本。它的語法有時很模糊。 – Overdose

+0

http://en.wikipedia.org/wiki/Structured_text – Overdose

+0

@Overdose,啊,這是完全不同的東西! :) –