pascalabcnet/Grammars/Oberon00/oberon00.lex
Бондарев Иван e6e67c193c initial commit
2015-05-14 21:35:07 +02:00

59 lines
1.3 KiB
Plaintext

%namespace GPPGParserScanner
%using PascalABCCompiler.Oberon00Parser;
Alpha [a-zA-Z_]
Digit [0-9]
AlphaDigit {Alpha}|{Digit}
INTNUM {Digit}+
ID {Alpha}{AlphaDigit}*
%%
":=" { return (int)Tokens.ASSIGN; }
";" { return (int)Tokens.SEMICOLUMN; }
"-" { return (int)Tokens.MINUS; }
"+" { return (int)Tokens.PLUS; }
"*" { return (int)Tokens.MULT; }
"/" { return (int)Tokens.DIVIDE; }
"<" { return (int)Tokens.LT; }
">" { return (int)Tokens.GT; }
"<=" { return (int)Tokens.LE; }
">=" { return (int)Tokens.GE; }
"=" { return (int)Tokens.EQ; }
"#" { return (int)Tokens.NE; }
"(" { return (int)Tokens.LPAREN; }
")" { return (int)Tokens.RPAREN; }
"," { return (int)Tokens.COLUMN; }
"~" { return (int)Tokens.NOT; }
"&" { return (int)Tokens.AND; }
"." { return (int)Tokens.COMMA; }
":" { return (int)Tokens.COLON; }
"!" { return (int)Tokens.EXCLAMATION; }
\x01 { return (int)Tokens.INVISIBLE; }
{ID} {
int res = Keywords.KeywordOrIDToken(yytext);
if (res == (int)Tokens.ID)
yylval.sVal = yytext;
return res;
}
{INTNUM} {
yylval.iVal = int.Parse(yytext);
return (int)Tokens.INTNUM;
}
%{
yylloc = new QUT.Gppg.LexLocation(tokLin, tokCol, tokELin, tokECol);
%}
%%
public override void yyerror(string format, params object[] args)
{
string errorMsg = PT.CreateErrorString(args);
PT.AddError(errorMsg,yylloc);
}