계산기용 스캐너 만들기 - Lex 편
L [\(] R [\)] D [0-9] O [\+\-\*\/\%\^] I
[A-Za-z][A-Za-z0-9_]* %start var ConvertResult : extended; %% {L} WriteLn(Format('Left
Parenthesis : %s', [yytext])); {R} WriteLn(Format('Right
Parenthesis : %s', [yytext])); {D}+(\.{D}+)?([Ee][+-]?{D}+)? begin try
ConvertResult := StrToFloat(yytext); WriteLn(Format('Number : %s',
[FloatToStr(ConvertResult)])) except WriteLn(Format('Error : %s', [yytext])) end; end; {I} WriteLn(Format('Identifier
: %s', [yytext])); {O} WriteLn(Format('Operation
: %s', [yytext])); "
" ; . | \n ; |
- svn://trunk\Bin
program Sample;
{$APPTYPE CONSOLE}
uses
SysUtils,
dlib,
lexlib;
type
TLexer = class(TLexerParserBase)
public
function parse() : integer; override;
end;
{$I exprlex.pas}
var
Lexer : TLexer;
begin
Lexer := TLexer.Create;
try
Lexer.parse();
finally
Lexer.Free;
end;
ReadLn;
end.
[/Code]