こんにちは私は与えられた入力に基づいてブール式trueまたはfalseを返すjavaまたはc#メソッドを実行したいと思います。例えば:
if(入力がantlr文法と一致する)がtrueを返す; それ以外の場合はfalseを返します。したがって、問題は、commontreeに不一致トークンがあるかどうかを確認する方法がわからないことです。ツリーをトラバースしようとしましたが、ツリーのノードとして不一致トークンが表示されません。おそらく問題は、ASTが不一致のトークンを表示せず、解析ツリーのみを表示することです。誰かがパーサーから解析ツリーを取得する方法を教えてくれた場合にも役立つ可能性がありますか?
ANTLR .gファイルを作成しましたが、正常に機能します。次の手順を実行する必要があります。入力が正しいかどうかを確認する必要があります。これを実行しましたが、機能しません。
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:4行の無関係な入力'+'はEOFを期待しています」
コンソールで。