2013-08-23 4 views
1

간단한 파일을 구문 분석하면 이상한 오류 메시지가 생성되므로 분명히 잘못된 문법입니다.ANTLR4 구문 분석 오류 : 입력시 가능한 대안 없음

오류를 수정하지 않고도 다음과 같은 문법을 간소화했습니다 (구조가 같지만 ANTLRWorks 색상의 트리 guy 출력 int 샘플 파일을 다르게 제거하면 'this').

grammar DepClsJ_no_java_debug; 

module : (methodDecl)* ; 

methodDecl : pathType Identifier '()' block ; 

pathType : Identifier | 'this' ; 

block : '{' 
    (localDecl ';' )* 
    (statement )* 
    (expr )? 
    '}' ; 

localDecl : pathType Identifier ('=' expr)?; 

statement : block | expr ';' ; 

expr : dotExpr ('=' dotExpr )* ; dotExpr : Identifier ('.' Identifier)* ; 

Identifier : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; 

데모 코드 :

line 3:8 no viable alternative at input 'intb' 
line 3:9 mismatched input ';' expecting '()' 

답변

5

int b;이 후 나타날 수 없습니다 문법의 block 규칙에 따른 localDecl입니다 :

void main() { 
    a = c; 
    int b; 
} 

ANTLRWorks이 나에게 다음과 같은 오류 메시지를 제공합니다 첫 번째는 statement입니다. 다음 구문을 사용하여 문법을 완화 한 경우 구문 분석 트리 수신기를 사용하여 구문 분석이 성공적으로 완료된 후에 의미있는 오류 메시지를 생성 할 수있었습니다.

block 
    : '{' 
    (localDecl ';' | statement)* 
    expr? 
    '}' 
    ; 
+2

OMG 어떻게 볼 수 있습니까? – Bastian