Initial check in docu
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user