2013-04-17 4 views
2

저는 파싱 작업을하기 위해 TreeTop을 사용하기 시작했습니다. ast규칙의 순서는 TreeTop에서 중요합니까?

grammar Fortran 
    rule integer 
     [1-9] [0-9]* 
    end 

    rule id 
     [a-zA-Z] [a-zA-Z0-9]* 
    end 
end 

parser = FortranParser.new 
ast = parser.parse('1') 

결과 :

[SyntaxNode offset=0, "1", SyntaxNode offset=1, ""] 

하지만 rule integerrule id을 배치 할 때, 결과가 nil입니다 다음은 나 퍼즐 코드 조각입니다. 문제가 무엇입니까? 미리 감사드립니다!

답변

3

나는 방금 어디서 잘못되었는지 알아 냈다고 생각합니다! 제 규칙으로 배치 다른 규칙을 포함하는 상부 규칙이 있어야한다 :

grammar Fortran 
    rule statement 
     (id/integer)* { 
      def content 
       elements.map { |e| e.content } 
      end 
     } 
    end 

    rule id 
     [a-zA-Z] [a-zA-Z0-9]* { 
      def content 
       [:id, text_value] 
      end 
     } 
    end 

    rule integer 
     [1-9] [0-9]* { 
      def content 
       [:integer, text_value] 
      end 
     } 
    end 
end 

parser = FortranParser.new 
ast = parser.parse('1') 

이 결과는

[[:integer, "1"]] 
이다