/* * Copyright (c) 2015 PLUMgrid, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ %{ #include "lexer.h" %} %option yylineno nodefault yyclass="Lexer" noyywrap c++ prefix="ebpfcc" %option never-interactive %{ #include #include "parser.yy.hh" std::string tmp_str_cc; %} %x STRING_ %% \" {BEGIN STRING_;} \" { BEGIN 0; yylval_->string = new std::string(tmp_str_cc); tmp_str_cc = ""; return Tok::TSTRING; } \\n {tmp_str_cc += "\n"; } . {tmp_str_cc += *yytext; } [ \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::TARROW); "." return save(Tok::TDOT); "," return save(Tok::TCOMMA); "+" return save(Tok::TPLUS); "++" return save(Tok::TINCR); "-" return save(Tok::TMINUS); "--" return save(Tok::TDECR); "*" 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); "case" return save(Tok::TCASE); "continue" return save(Tok::TCONTINUE); "else" return save(Tok::TELSE); "false" return save(Tok::TFALSE); "goto" return save(Tok::TGOTO); "if" return save(Tok::TIF); "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); "return" return save(Tok::TRETURN); "state" return save(Tok::TSTATE); "struct" return save(Tok::TSTRUCT); "switch" return save(Tok::TSWITCH); "true" return save(Tok::TTRUE); "u8" return save(Tok::TU8); "u16" return save(Tok::TU16); "u32" return save(Tok::TU32); "u64" return save(Tok::TU64); [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 \"%s\"\n", yytext); yyterminate(); %%