| /* |
| * 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 "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_>\\n {tmp_str_cc += "\n"; } |
| <STRING_>. {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(); |
| |
| %% |