/*** 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: "\"" (~["\""])* "\""> } |
/**************************************/ /********** 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> ) |