我有以下语法,我想匹配字符串“{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();
}
}
谢谢你的帮助。