안녕하세요, 주어진 입력을 기반으로 부울 식 true 또는 false를 반환합니다 자바 또는 C# 메서드를 할 싶어요. 예 :ANTLR 커먼 트리가 올바른지 확인하십시오. 또는 주어진 입력이 ANTLR 문법과 일치하는지 확인하는 방법?
if (입력이 antlr 문법과 일치) return true; else false를 반환합니다. 그래서 문제는 내가 어떻게 montatchetoken을 가지고 있는지 확인하는 방법을 알고있다. 나는 나무를 가로 지르려고했으나 어떤 미스 매치 토큰을 그 나무의 노드로주지 않았다. 아마도 문제는 AST가 파스 트리 만 일치하지 않는 토큰을 표시하지 않는다는 것입니다. 누군가 파서로부터 parsetree를 얻는 방법을 말해 준다면 도움이 될 수 있습니까?
내가 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를 반환합니다. 난 항상 그것을 짓을하는 방법은 사실 반환하지만 문자열이없는 경우는
인쇄 수정 "행 1 : 4 외부 입력 '+'EOF 기대"콘솔
.
고맙습니다. 아주 좋았습니다. 이제 나는 하나 더 질문한다. 내 문법은 예를 들어이 문자열 a * b를 받아들이지 만 ** b를 받아 들일 수는 없지만이 부분은 잘 작동하지만 언어의 일부가 아닌 문자열을 추가하면 예외가 발생하지만 예를 들어 a * b_를 반환합니다. 이 경우 '_'은 제 언어의 일부가 아닙니다.어떤 제안 – sm13294
오, 내 렉서에 @Override를 추가하는 것을 잊어 버렸습니다. 고마워요. – sm13294