2013-04-27 18 views
0

我想创建一个简单的编译器,使用ANTLR 3.5和java 1.6 +我添加了jar文件,但是我收到了这个错误和“原因不能创建语法”,但我不明白为什么有任何帮助?这还不是全部代码,但我想通过位的代码,它仍然没有编制解释器被禁用

grammar LittleNic; 
@members { 
    public ErrorReporter err; 
    public void displayRecognitionError(String[] tokenNames, 
             RecognitionException e) { 
     String msg = getErrorMessage(e, tokenNames); 
     err.reportSyntaxError(e.line, e.charPositionInLine, msg); 
    } 
} 

@lexer::members { 
    public ErrorReporter err; 
    public void displayRecognitionError(String[] tokenNames, 
             RecognitionException e) { 
     String msg = getErrorMessage(e, tokenNames); 
    err.reportSyntaxError(e.line, e.charPositionInLine, msg); 
    } 
} 

options { 
    language = Java; 
} 

program: 'PROGRAM' IDEN ';' (dec (';' dec)*)? body ';' ; 
dec:' '; 
body: 'BEGIN' statementlist 'END'; 
statementlist:' '; 



fragment FIRSTS: 'a'..'z'|'A'..'Z'; 
IDEN: (FIRSTS(FIRSTS|'0'..'9'|'_')*); 

回答

1

变化从

grammar LittleNic; 
@members { 
    public ErrorReporter err; 
    public void displayRecognitionError(String[] tokenNames, 
             RecognitionException e) { 
     String msg = getErrorMessage(e, tokenNames); 
     err.reportSyntaxError(e.line, e.charPositionInLine, msg); 
    } 
} 

@lexer::members { 
    public ErrorReporter err; 
    public void displayRecognitionError(String[] tokenNames, 
             RecognitionException e) { 
     String msg = getErrorMessage(e, tokenNames); 
    err.reportSyntaxError(e.line, e.charPositionInLine, msg); 
    } 
} 

options { 
    language = Java; 
} 

grammar LittleNic; 

options { 
    language = Java; 
} 

@members { 
    public ErrorReporter err; 
    public void displayRecognitionError(String[] tokenNames, 
             RecognitionException e) { 
     String msg = getErrorMessage(e, tokenNames); 
     err.reportSyntaxError(e.line, e.charPositionInLine, msg); 
    } 
} 

@lexer::members { 
    public ErrorReporter err; 
    public void displayRecognitionError(String[] tokenNames, 
             RecognitionException e) { 
     String msg = getErrorMessage(e, tokenNames); 
    err.reportSyntaxError(e.line, e.charPositionInLine, msg); 
    } 
} 

,然后再试一次。 option应放在顶部。