2009-12-08 5 views
0

antlr3에 대한 느낌을 얻으려고하고 Expression evaluator을 ANTLRWorks 창 (최신 버전)에 붙여 컴파일했습니다. 그것은 성공적으로 컴파일 시작했지만 두 가지 문제 :예제 문법을 시도 할 때 구문 분석기가 비정상적으로 작동합니다.

  • 1+2*4/3;의 입력을 사용하려고 파서가 1+2*43되는 실제 입력 결과.
  • 그래픽 파서 트리에 표시되는 오류 중 하나는 MissingTokenException(0!=0)입니다.

내가 antlr을 처음 접했을 때 누군가 도와 줄 수 있습니까?

답변

1

당신이하는 지원하지 부문 (단지 여기에는 구분이 없다 알 수 있습니다, 코드를 살펴에 링크 된 예 : 우리가 할 때

expr returns [int value] 
    : e=multExpr {$value = $e.value;} 
     ( '+' e=multExpr {$value += $e.value;} 
     | '-' e=multExpr {$value -= $e.value;} 
     )* 
+0

오. 이전 예제의 유물은 내가 추측하고 있었다. 더 좋은 예를 들어 보겠습니다. – RCIX

+0

그래, 지금 어떻게 작동합니까? – RCIX

1

우리는 종종

MissingTokenException(0!=0) 

을 가져가 실수로 찾고있는 토큰을 찾을 수 없다는 것을 의미하고 잘못된 토큰으로 생성 될 수 있다고 생각합니다. 문법에 따라 파서가 때때로 "복구"할 수 있습니다.

R 또한 LEXER가 파서 (parser) 이전에 작동한다는 것을 알려주고 파서에 실제로 어떤 토큰이 전달되는지 확인해야한다. AntlrWorks 디버거는 여기에서 매우 유용 할 수 있습니다.

+0

프로그램 상태를 본 적이 한번도 없었습니다 :) – RCIX

관련 문제