Initial check in docu
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
// ============================================================================
|
||||
// This file is generated by the Delphi Parser Generator.
|
||||
// ----------------------------------------------------------------------------
|
||||
// DPG version: 1.0.1.0r
|
||||
// Grammar: hocParser
|
||||
// ============================================================================
|
||||
unit hocParser;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes,
|
||||
Contnrs,
|
||||
dpgLLkParser,
|
||||
dpgToken,
|
||||
dpgTypes,
|
||||
hocParserTokens,
|
||||
SysUtils;
|
||||
|
||||
type
|
||||
// =========================================================================
|
||||
// Class ThocParser declaration
|
||||
// =========================================================================
|
||||
ThocParser = class( TdpgLLkParser)
|
||||
|
||||
public // Public grammar rules
|
||||
procedure prog ;
|
||||
function expression : double;
|
||||
function term : double;
|
||||
function factor : double;
|
||||
function uNumber : double;
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
dpgException,
|
||||
dpgExceptionSemantic,
|
||||
dpgExceptionMismatchedToken;
|
||||
|
||||
// ============================================================================
|
||||
// prog
|
||||
// ============================================================================
|
||||
procedure ThocParser.prog;
|
||||
var
|
||||
val : double;
|
||||
|
||||
begin
|
||||
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in [TT_LPAREN,TT_UNUMBER,TT_NEWLINE])) then
|
||||
begin
|
||||
if (( LA(1) in [TT_LPAREN,TT_UNUMBER])) then
|
||||
begin
|
||||
val := expression;
|
||||
end;
|
||||
match(TT_NEWLINE);
|
||||
end
|
||||
|
||||
else
|
||||
break;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// expression
|
||||
// ============================================================================
|
||||
function ThocParser.expression: double;
|
||||
var
|
||||
val : double;
|
||||
|
||||
begin
|
||||
|
||||
result := term;
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in [TT_PLUS])) then
|
||||
begin
|
||||
match(TT_PLUS);
|
||||
val := term;
|
||||
result := result + val;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [TT_MINUS])) then
|
||||
begin
|
||||
match(TT_MINUS);
|
||||
val := term;
|
||||
result := result - val;
|
||||
end
|
||||
|
||||
else
|
||||
break;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// term
|
||||
// ============================================================================
|
||||
function ThocParser.term: double;
|
||||
var
|
||||
val : double;
|
||||
|
||||
begin
|
||||
|
||||
result := factor;
|
||||
|
||||
while(true) do
|
||||
begin
|
||||
if (( LA(1) in [TT_STAR])) then
|
||||
begin
|
||||
match(TT_STAR);
|
||||
val := factor;
|
||||
result := result * val;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [TT_SLASH])) then
|
||||
begin
|
||||
match(TT_SLASH);
|
||||
val := factor;
|
||||
result := result / val;
|
||||
end
|
||||
|
||||
else
|
||||
break;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// factor
|
||||
// ============================================================================
|
||||
function ThocParser.factor: double;
|
||||
begin
|
||||
|
||||
if (( LA(1) in [TT_UNUMBER])) then
|
||||
begin
|
||||
result := uNumber;
|
||||
end
|
||||
|
||||
else if (( LA(1) in [TT_LPAREN])) then
|
||||
begin
|
||||
match(TT_LPAREN);
|
||||
result := expression;
|
||||
match(TT_RPAREN);
|
||||
end
|
||||
|
||||
else
|
||||
Raise EdpgMismatchedToken.Create( LT(1), [TT_LPAREN,TT_UNUMBER], FileName);
|
||||
end;
|
||||
|
||||
// ============================================================================
|
||||
// uNumber
|
||||
// ============================================================================
|
||||
function ThocParser.uNumber: double;
|
||||
var
|
||||
n: IdpgToken;
|
||||
|
||||
begin
|
||||
|
||||
n := LT(1);
|
||||
match(TT_UNUMBER);
|
||||
result := StrToIntDef( n.TokenText);
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user