Newer
Older
%using ScannerHelper;
%namespace SimpleScanner
Alpha [a-zA-Z_]
Digit [0-9]
AlphaDigit {Alpha}|{Digit}
INTNUM {Digit}+
REALNUM {INTNUM}\.{INTNUM}
ID {Alpha}{AlphaDigit}*
DotChr [^\r\n]
OneLineCmnt \/\/{DotChr}*
StringUp \'[^']*\'
// , - Scanner
%{
public int LexValueInt;
public double LexValueDouble;
%%
{INTNUM} {
LexValueInt = int.Parse(yytext);
return (int)Tok.INUM;
}
{REALNUM} {
LexValueDouble = double.Parse(yytext);
return (int)Tok.RNUM;
}
begin {
return (int)Tok.BEGIN;
}
end {
return (int)Tok.END;
}
cycle {
return (int)Tok.CYCLE;
}
{ID} {
return (int)Tok.ID;
}
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
{OneLineCmnt} {
return (int)Tok.COMMENT;
}
{StringUp} {
return (int)Tok.STRINGAP;
}
"{" {
// COMMENT
BEGIN(COMMENT);
return (int)Tok.LONGCOMMENT;
}
<COMMENT> "}" {
// INITIAL
BEGIN(INITIAL);
return (int)Tok.LONGCOMMENT;
}
<COMMENT>begin {
}
<COMMENT>end {
}
<COMMENT>cycle {
}
<COMMENT>{ID} {
// ID
idsInComment.Add(yytext);
}
":" {
return (int)Tok.COLON;
}
":=" {
return (int)Tok.ASSIGN;
}
";" {
return (int)Tok.SEMICOLON;
}
[^ \r\n] {
LexError();
}
%%
// - Scanner
public void LexError()
{
}
public string TokToString(Tok tok)
{
switch (tok)
{
case Tok.ID:
return tok + " " + yytext;
case Tok.INUM:
return tok + " " + LexValueInt;
case Tok.RNUM:
return tok + " " + LexValueDouble;
default:
return tok + "";
}
}