BNF for PilotsParser.jj

TOKENS

/*** Skip whitespace and comments ***/
<DEFAULT> SKIP : {
" "
| "\t"
| "\n"
| "\r"
| "\r\n"
| "/*" : IN_COMMENT
}

   
<IN_COMMENT> MORE : {
<~[]>
}

   
<IN_COMMENT> SKIP : {
"/*" : {
| "*/" : {
}

   
/*** The keywords ***/
<DEFAULT> TOKEN : {
<PROGRAM_START: "program">
| <INPUTS: "inputs">
| <OUTPUTS: "outputs">
| <ERRORS: "errors">
| <SIGNATURES: "signatures">
| <CORRECTS: "correct">
| <USING: "using">
| <AT: "at">
| <EVERY: "every">
| <CLOSEST: "closest">
| <EUCLIDEAN: "euclidean">
| <INTERPOLATE: "interpolate">
| <NSEC: "nsec">
| <USEC: "usec">
| <MSEC: "msec">
| <SEC: "sec">
| <MIN: "min">
| <HOUR: "hour">
| <DAY: "day">
| <SQRT: "sqrt">
| <SIN: "sin">
| <COS: "cos">
| <TAN: "tan">
| <ARCSIN: "asin">
| <ARCCOS: "acos">
| <ARCTAN: "atan">
| <ABS: "abs">
| <PROGRAM_END: "end">
}

   
<DEFAULT> TOKEN : {
<#DIGIT: ["0"-"9"]>
| <LPAR: "(">
| <RPAR: ")">
| <COMMA: ",">
| <INTEGER: ("+" | "-")? (<DIGIT>)+>
| <#SCALEFACTOR: ("E" | "e") ("+" | "-")? (<DIGIT>)+>
| <REAL: ("+" | "-")? (<DIGIT>)+ "." (<DIGIT>)* (<SCALEFACTOR>)?>
| <#LETTER: ["A"-"Z","a"-"z","_"]>
| <VAR: <LETTER> (<LETTER> | <DIGIT>)*>
| <STRING: "\"" (~["\""])* "\"">
}

   

NON-TERMINALS

/**************************************/
/********** START OF GRAMMAR **********/
/**************************************/
Pilots ::= <PROGRAM_START> <VAR> ";" <INPUTS> ( ";" | ( Input )* ) <OUTPUTS> ( ";" | ( Output )* ) ( <ERRORS> ( ";" | ( Error )* ) )? ( <SIGNATURES> ( ";" | ( Signature )* ) )? ( <CORRECTS> ( ";" | ( Correct )* ) )? <PROGRAM_END> ";"
Input ::= Vars Dim <USING> Methods ";"
Output ::= Vars ":" Exps <AT> <EVERY> Time ";"
Error ::= Vars ":" Exps ";"
Signature ::= <VAR> ( Const )? ":" <VAR> "=" Exps ( <STRING> )? ";"
Correct ::= <VAR> ( Const )? ":" <VAR> "=" Exp ";"
Vars ::= <VAR> ( "," <VAR> )*
Const ::= "(" <VAR> ")"
Dim ::= "(" Exps ")"
Method ::= ( <CLOSEST> | <EUCLIDEAN> | <INTERPOLATE> ) "(" Exps ")"
Methods ::= Method ( "," Method )*
Time ::= Number ( <NSEC> | <USEC> | <MSEC> | <SEC> | <MIN> | <HOUR> | <DAY> )
Exps ::= Exp ( "," Exp )*
Exp ::= ( Func "(" Exps ")" Exp2 | "(" Exp ")" Exp2 | Value Exp2 )
Exp2 ::= ( Func Exp Exp2 | )
Func ::= ( "+" | "-" | "*" | "/" | "^" | ">" | ">=" | "<" | "<=" | "!=" | <SQRT> | <SIN> | <COS> | <TAN> | <ARCSIN> | <ARCCOS> | <ARCTAN> | <ABS> )
Number ::= ( <INTEGER> | <REAL> )
Value ::= ( Number | <VAR> )