unit hocParser; // ============================================================================ // Parser class declaration // ============================================================================ parser ThocParser; // ---------------------------------------------------------------------------- // Parser options // ---------------------------------------------------------------------------- options { k = 2; importVocab = hocLexer; exportVocab = hocParser; } // ============================================================================ // Begin rule definitions // // Remember: All parser rule names must begin with LOWERCASE letter! // ============================================================================ // ---------------------------------------------------------------------------- // prog // ---------------------------------------------------------------------------- prog local { val : double; } : ( ( val = expression )? NEWLINE )* ; // ---------------------------------------------------------------------------- // expression // ---------------------------------------------------------------------------- expression returns [double] local { val : double; } : result = term ( PLUS val = term { result := result + val; } | MINUS val = term { result := result - val; } )* ; // ---------------------------------------------------------------------------- // term // ---------------------------------------------------------------------------- term returns [double] local { val : double; } : result = factor ( STAR val = factor { result := result * val; } | SLASH val = factor { result := result / val; } )* ; // ---------------------------------------------------------------------------- // factor // ---------------------------------------------------------------------------- factor returns [double] : result = uNumber | LPAREN result = expression RPAREN ; // ---------------------------------------------------------------------------- // uNumber // ---------------------------------------------------------------------------- uNumber returns [double] : n:UNUMBER { result := StrToIntDef( n.TokenText); } ; // ============================================================================ // End rule definitions // ============================================================================ // ---------------------------------------------------------------------------- // This section is used for generating member defintions in the unit 'hocParser'. // The content of the section is verbatim copied into the generated code. // ---------------------------------------------------------------------------- memberdef { }