blog-static/code/compiler/13/scanner.l

44 lines
1.4 KiB
Plaintext
Raw Normal View History

2020-09-08 18:38:05 -07:00
%option noyywrap
%{
#include <iostream>
#include "ast.hpp"
#include "definition.hpp"
#include "parser.hpp"
2020-09-09 12:21:50 -07:00
yy::parser::location_type location;
2020-09-08 18:38:05 -07:00
#define YY_DECL yy::parser::symbol_type yylex()
2020-09-09 12:21:50 -07:00
#define YY_USER_ACTION location.step(); location.columns(yyleng);
2020-09-08 18:38:05 -07:00
%}
%%
2020-09-09 12:21:50 -07:00
\n { location.lines(); }
[ ]+ {}
\\ { return yy::parser::make_BACKSLASH(location); }
\+ { return yy::parser::make_PLUS(location); }
\* { return yy::parser::make_TIMES(location); }
- { return yy::parser::make_MINUS(location); }
\/ { return yy::parser::make_DIVIDE(location); }
[0-9]+ { return yy::parser::make_INT(atoi(yytext), location); }
defn { return yy::parser::make_DEFN(location); }
data { return yy::parser::make_DATA(location); }
case { return yy::parser::make_CASE(location); }
of { return yy::parser::make_OF(location); }
let { return yy::parser::make_LET(location); }
in { return yy::parser::make_IN(location); }
\{ { return yy::parser::make_OCURLY(location); }
\} { return yy::parser::make_CCURLY(location); }
\( { return yy::parser::make_OPAREN(location); }
\) { return yy::parser::make_CPAREN(location); }
, { return yy::parser::make_COMMA(location); }
-> { return yy::parser::make_ARROW(location); }
= { return yy::parser::make_EQUAL(location); }
[a-z][a-zA-Z]* { return yy::parser::make_LID(std::string(yytext), location); }
[A-Z][a-zA-Z]* { return yy::parser::make_UID(std::string(yytext), location); }
<<EOF>> { return yy::parser::make_YYEOF(location); }
2020-09-08 18:38:05 -07:00
%%