macro : expr EOI; expr : stmt Zexpr; Zexpr : EMPTY | '+' expr | '-' expr | OR expr | XOR expr ; stmt : term Zstmt; Zstmt : EMPTY | '*' term | '/' term | '%' term | AND term ; term : number | '(' expr ')' | LOG '(' expr ')' | LN '(' expr ')' | LG '(' expr ')' | EXP '(' expr ')' | ABS '(' expr ')' | SIN '(' expr ')' | COS '(' expr ')' | TAN '(' expr ')' | ASIN '(' expr ')' | ACOS '(' expr ')' | ATAN '(' expr ')' | NOT '(' expr ')' | DIV '(' expr ',' expr ')' | CNP '(' expr ',' expr ')' | POW '(' expr ',' expr ')' | ANP '(' expr ',' expr ')' ; number : HEXVAL | afloat | '+' afloat | '-' afloat | NAME ; afloat : INTEGER decimal exponent ; decimal : EMPTY | '.' INTEGER ; exponent : EMPTY | 'E' Eexp; Eexp : INTEGER | '-' INTEGER | '+' INTEGER ;
Example 1: Grammar used to provide basic mathematical operators.
Copyright © 1998, Dr. Dobb's Journal