Initial check in docu
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
// ============================================================================
|
||||
// Demo parser for four operator calculator
|
||||
// ============================================================================
|
||||
unit calcParser;
|
||||
|
||||
parser TcalcParser;
|
||||
options
|
||||
{
|
||||
importVocab = calcLexer;
|
||||
exportVocab = calcParser;
|
||||
// k = 2;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// calc
|
||||
// ============================================================================
|
||||
calc
|
||||
local
|
||||
{
|
||||
v: integer;
|
||||
}
|
||||
: (v=expression SEMI {writeln(v);} )+
|
||||
;
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// expression
|
||||
// ============================================================================
|
||||
expression returns [integer]
|
||||
: result=simpleExpression
|
||||
;
|
||||
|
||||
// ============================================================================
|
||||
// simpleExpression
|
||||
// ============================================================================
|
||||
simpleExpression returns [integer]
|
||||
local
|
||||
{
|
||||
v : integer;
|
||||
}
|
||||
: result=term
|
||||
(
|
||||
PLUS v=term { result := result + v; }
|
||||
| MINUS v=term { result := result - v; }
|
||||
)*
|
||||
;
|
||||
|
||||
// ============================================================================
|
||||
// term
|
||||
// ============================================================================
|
||||
term returns [integer]
|
||||
local
|
||||
{
|
||||
v : integer;
|
||||
}
|
||||
: result=factor
|
||||
(
|
||||
STAR v=factor { result := result * v; }
|
||||
| SLASH v=factor { result := result div v; }
|
||||
)*
|
||||
;
|
||||
|
||||
// ============================================================================
|
||||
// factor
|
||||
// ============================================================================
|
||||
factor returns [integer]
|
||||
local
|
||||
{
|
||||
s: integer;
|
||||
}
|
||||
{
|
||||
s := 1;
|
||||
}
|
||||
:
|
||||
(
|
||||
PLUS { s := 1; }
|
||||
| MINUS { s := -1; }
|
||||
)?
|
||||
(
|
||||
result=uInt
|
||||
| LPAREN result=expression RPAREN
|
||||
)
|
||||
{
|
||||
result := s * result;
|
||||
}
|
||||
;
|
||||
|
||||
// ============================================================================
|
||||
// uInt
|
||||
// ============================================================================
|
||||
uInt returns [integer]
|
||||
: x:INT { result := StrToInt( x.TokenText); }
|
||||
;
|
||||
Reference in New Issue
Block a user