Files
bds.mr.dpg/doc/tutorial/hoc/hoc 1/hocParser.g
T
2026-01-03 18:31:15 +01:00

102 lines
2.8 KiB
Plaintext

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
{
}