blob: 94247876b70c996f698ce5b759e36dcf1e6e4695 [file] [log] [blame]
/*
* =====================================================================
* Copyright (c) 2012, PLUMgrid, http://plumgrid.com
*
* This source is subject to the PLUMgrid License.
* All rights reserved.
*
* THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
* PARTICULAR PURPOSE.
*
* PLUMgrid confidential information, delete if you are not the
* intended recipient.
*
* =====================================================================
*/
%{
#include "cc/lexer.h"
%}
%option yylineno nodefault yyclass="Lexer" noyywrap c++ prefix="ebpfcc"
%option never-interactive
%{
#include <string>
#include "cc/parser.yy.hh"
std::string tmp_str_cc;
%}
%x STRING_
%%
\' {BEGIN STRING_;}
<STRING_>\' { BEGIN 0;
yylval_->string = new std::string(tmp_str_cc);
tmp_str_cc = "";
return Tok::TSTRING;
}
<STRING_>. {tmp_str_cc += *yytext; }
<STRING_>\n {tmp_str_cc += "\n"; }
[ \t]+ { save_text(); }
\n { if (next_line()) { return save(Tok::TSEMI, true); } }
"//".*\n { if (next_line()) { return save(Tok::TSEMI, true); } }
^"#" return save(Tok::TPRAGMA);
"=" return save(Tok::TEQUAL);
"==" return save(Tok::TCEQ);
"!=" return save(Tok::TCNE);
"<" return save(Tok::TCLT);
"<=" return save(Tok::TCLE);
">" return save(Tok::TCGT);
">=" return save(Tok::TCGE);
"(" return save(Tok::TLPAREN);
")" return save(Tok::TRPAREN);
"{" return save(Tok::TLBRACE);
"}" return save(Tok::TRBRACE);
"[" return save(Tok::TLBRACK);
"]" return save(Tok::TRBRACK);
"." return save(Tok::TDOT);
"," return save(Tok::TCOMMA);
"+" return save(Tok::TPLUS);
"-" return save(Tok::TMINUS);
"*" return save(Tok::TMUL);
"/" return save(Tok::TDIV);
"%" return save(Tok::TMOD);
"^" return save(Tok::TXOR);
"$" return save(Tok::TDOLLAR);
"!" return save(Tok::TNOT);
"~" return save(Tok::TCMPL);
":" return save(Tok::TCOLON);
"::" return save(Tok::TSCOPE);
";" return save(Tok::TSEMI);
"&&" return save(Tok::TAND);
"||" return save(Tok::TOR);
"&" return save(Tok::TLAND);
"|" return save(Tok::TLOR);
"@" return save(Tok::TAT);
"const" return save(Tok::TCONST);
"struct" return save(Tok::TSTRUCT);
"var" return save(Tok::TVAR);
"state" return save(Tok::TSTATE);
"timer" return save(Tok::TTIMER);
"goto" return save(Tok::TGOTO);
"continue" return save(Tok::TCONTINUE);
"next" return save(Tok::TNEXT);
"on_match" return save(Tok::TMATCH);
"on_miss" return save(Tok::TMISS);
"on_failure" return save(Tok::TFAILURE);
"on_valid" return save(Tok::TVALID);
"true" return save(Tok::TTRUE);
"false" return save(Tok::TFALSE);
"if" return save(Tok::TIF);
"else" return save(Tok::TELSE);
"switch" return save(Tok::TSWITCH);
"case" return save(Tok::TCASE);
"return" return save(Tok::TRETURN);
[a-zA-Z][a-zA-Z0-9_]* return save(Tok::TIDENTIFIER);
[0-9]+ return save(Tok::TINTEGER);
0x[0-9a-fA-F]+ return save(Tok::THEXINTEGER);
. printf("Unknown token\n"); yyterminate();
%%