こんにちは私は与えられた入力に基づいて真または偽のブール式を返すjavaまたはC#メソッドを実行したいです。例:ANTLRコモンツリーが正しいかどうかを確認するか、入力がANTLR文法に一致するかどうかをチェックする方法?
if(入力がantlr文法と一致する場合) return true; else falseを返します。 問題は、私は、どのようにmontatchetokenがあるかどうかを確認する方法を知っていません。私は木を横切ろうとしましたが、樹木のノードとしてミスマッチトークンを与えませんでした。おそらく問題は、ASTがパーズツリーだけの不一致のトークンを表示しないことです。誰かがパーサーをパーサーから取得する方法を教えても助けになるでしょうか?
私は次の操作を行う必要がある今、私はANTLR .Gファイルを行っている、それは良い作品:私は入力が正しかったかどうかをチェックする必要があるが、私はこれを行っているが、それは仕事をdoesntの:
public static boolean check() {
String file = "test.txt";
ANTLRReaderStream input;
try{
input = new ANTLRReaderStream(new FileReader(file));
regExLexer lexer = new regExLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
regExParser parser = new regExParser(tokens);
CommonTree root = (CommonTree)parser.goal().getTree();
return true;}
catch{
return false;}
}
私のメソッドからは、入力文字列が正しい場合にのみtrueを返します。そうでない場合はfalseを返します。私が行っている方法は、それは常にtrueを返しますが、文字列は、それが
印刷し正しくない場合:コンソールの
を「ライン1 EOF期待し4余分な入力 『+』」を。
ありがとう、とてもよかったです。今私はもう1つ質問します。私の文法は、例えばこの文字列a * bを受け入れますが、** bを受け入れません。この部分はうまくいきますが、言語の一部ではない文字列を追加すると、例外がスローされますが、例えばa * b_のように真を返します。この場合、 '_'は私の言語の一部ではありません。任意の提案 – sm13294
ああ、私のレクサーに@Overrideを追加するのを忘れた。どうもありがとうございました。 – sm13294