2014-06-11 2 views
1

json과 비슷한 언어의 antlr4로 문법을 작성했습니다.트리 평가

Gramar 파일 :

어떻게 방문 기능 트리를 통과 할 https://github.com/antlr/grammars-v4/tree/master/json? 지금까지 토큰의 스트림을 출력하는 코드 벨로우즈가 있지만 정규식 규칙을 사용하여 멤버와 값을 다시 파싱해야했습니다. GramatikaParserBaseVisitor<T> 어딘가에있는 주위는 기본 클래스로 사용할 수 있습니다이 있어야

 GramatikaLexer lexer = new GramatikaLexer(inputStream); 
     CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); 
     GramatikaParser parser = new GramatikaParser(commonTokenStream); 

     IParseTree tree = parser.start(); // start is entry point in .g4 file 

답변

0

:

public void Visit(IParseTree tree) 
    { 
     for (int i = 0; i < tree.ChildCount; i++) 
     { 
      if (tree.GetChild(i).ChildCount > 0) 
      { 
       Visit(tree.GetChild(i)); 

      } 
      else 
      { 
       Console.WriteLine(tree.GetChild(i).ToString()); 
      } 
     } 
    } 

내가 함께 나무를 얻을. 그 인수 IParseTree보다 풍부한 인터페이스를 가지고 있으며이 이름으로 아이들을 액세스 할 수 있습니다 그들은 또한 를 입력 object VisitStart(StartContext context), 입력 <Child>Context의 예 대신 :

그런 다음 가상 (T == object 여기) 등의 기능을 대체 할 수 있습니다 단순히 IParseTree입니다.