【发布时间】:2012-06-12 21:59:19
【问题描述】:
我有以下语法,我想匹配字符串“{name1, name2}”。我只想要包含至少一个元素的名称/整数列表。但是我得到了错误:
第 1:6 行在字符 ' ' 处没有可行的替代方案
第 1:11 行在字符 '}' 处没有可行的替代方案
第 1:7 行不匹配的输入“名称”需要 SIMPLE_VAR_TYPE
我希望空格等会被忽略...另外有趣的是输入“{name1,name2}”不会发生错误(“,”后没有空格)。 这是我的语法
grammar NusmvInput;
options {
language = Java;
}
@header {
package secltlmc.grammar;
}
@lexer::header {
package secltlmc.grammar;
}
specification :
SIMPLE_VAR_TYPE EOF
;
INTEGER
: ('0'..'9')+
;
SIMPLE_VAR_TYPE
: ('{' (NAME | INTEGER) (',' (NAME | INTEGER))* '}' )
;
NAME
: ('A'..'Z' | 'a'..'z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_' | '$' | '#' | '-')*
;
WS
: (' ' | '\t' | '\n' | '\r')+ {$channel = HIDDEN;}
;
这是我的测试代码
package secltlmc;
public class Main {
public static void main(String[] args) throws
IOException, RecognitionException {
CharStream stream = new ANTLRStringStream("{name1, name2}");
NusmvInputLexer lexer = new NusmvInputLexer(stream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
NusmvInputParser parser = new NusmvInputParser(tokenStream);
parser.specification();
}
}
感谢您的帮助。
【问题讨论】: