robert connell
robert connell

Reputation: 3

extraneous input error using ANTLR4

I am an ANTLR newbie and struggling with some of the errors that I am getting. Below I have included the grammar that I am using, The input file and the error that I am getting.

My Antlr Grammar file is as follows:

grammar Simple;

@header
{
package simple;
}

PARSER

program :
        anylinebefore+
        processline
        anylineafter+
        'MSEND' NEWLINE
         '.' EOF
        ;

anylinebefore:  CH* NEWLINE | commentline;

anylineafter:  statement | commentline;

statement: movestatement ; 

movestatement : 'MOVE' arg ('to' | 'TO')  ID '.' NEWLINE ;

arg : ID|STRING;

processline:  PROCESSLITERAL  NEWLINE; 

commentline:  '!' CH* NEWLINE;

LEXER

WS     : [ \t]+ -> skip ;
STRING  :  '\'' (~['])* '\'';
ID     : ('a'..'z'|'A'..'Z')+;
INT    : '0'..'9'+;
TO     : ('to' | 'TO');
CH      :       [\u0000-\uFFFE];
PROCESSLITERAL  :  'PROCESS SOURCE FOLLOWS';
NEWLINE   : '\r'? '\n'  ;

My input file is as follows:

MODIFY   
         PROCESS SOURCE FOLLOWS  
MOVE 'WSFRED' TO AGRPASSEDTWO.   
         MSEND    
         .

The error that I get is:

showtree:
     [java] line 1:0 extraneous input 'MODIFY' expecting {'!', CH, NEWLINE}

I don't understand why this isn't matching anylinebefore in the grammar Any help would be appreciated.

Upvotes: 0

Views: 450

Answers (1)

Terence Parr
Terence Parr

Reputation: 5962

"MODIFY" is an ID, which doesn't match anylinebefore+

Upvotes: 1

Related Questions