grammar SimpleCalc;
options
{
language=C;
}
tokens {Wiki Markup
PLUS = '+' ;
MINUS = '-' ;
MULT = '*' ;
DIV = '/' ;
}
@members { int main(int argc, char * argv[])
{ pSimpleCalcLexer lex = SimpleCalcLexerNew(
{
pANTLR3_INPUT_STREAM input = antlr3AsciiFileStreamNew(argv[1]));
pSimpleCalcLexer lex = SimpleCalcLexerNew(input);
pANTLR3_COMMON_TOKEN_STREAM tokens = antlr3CommonTokenStreamSourceNew(ANTLR3_SIZE_HINT, lex->pLexer->tokSource);
pSimpleCalcParser parser = SimpleCalcParserNew(tokens);
parser->expr(parser); }}
// Must manually clean up
parser->free(parser);
tokens->free(tokens);
lex->free(lex);
input->close(input);
}
}
/*------------------------------------------------------------------
* PARSER RULES
*------------------------------------------------------------------*/
expr : term ( ( PLUS | MINUS ) term )* ;
term : factor ( ( MULT | DIV ) factor )* ;
factor : NUMBER ;
/*------------------------------------------------------------------
* LEXER RULES
*------------------------------------------------------------------*/
NUMBER : (DIGIT)+ ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;
fragment DIGIT : '0'..'9' ;
|