次の文法があり、文字列 "{name1, name2}" と一致させたいと考えています。少なくとも 1 つの要素を持つ名前/整数のリストが必要です。ただし、次のエラーが表示されます:
行 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();
}
}
ご協力いただきありがとうございます。