123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- %{
- #include <string.h>
- #include <stdlib.h>
- #include "aidl_language.h"
- #include "aidl_language_y.h"
- #define YY_USER_ACTION yylloc->columns(yyleng);
- %}
- %option yylineno
- %option noyywrap
- %option nounput
- %option noinput
- %option reentrant
- %option bison-bridge
- %option bison-locations
- %x COPYING LONG_COMMENT
- identifier [_a-zA-Z][_a-zA-Z0-9]*
- whitespace ([ \t\r]+)
- intvalue [-+]?(0|[1-9][0-9]*)
- hexvalue 0[x|X][0-9a-fA-F]+
- floatvalue [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f?
- %%
- %{
- /* This happens at every call to yylex (every time we receive one token) */
- std::string extra_text;
- yylloc->step();
- %}
- \%\%\{ { extra_text += "/**"; BEGIN(COPYING); }
- <COPYING>\}\%\% { extra_text += "**/"; yylloc->step(); BEGIN(INITIAL); }
- <COPYING>.* { extra_text += yytext; }
- <COPYING>\n+ { extra_text += yytext; yylloc->lines(yyleng); }
- \/\* { extra_text += yytext; BEGIN(LONG_COMMENT); }
- <LONG_COMMENT>\*+\/ { extra_text += yytext; yylloc->step(); BEGIN(INITIAL); }
- <LONG_COMMENT>\*+ { extra_text += yytext; }
- <LONG_COMMENT>\n+ { extra_text += yytext; yylloc->lines(yyleng); }
- <LONG_COMMENT>[^*\n]+ { extra_text += yytext; }
- \"[^\"]*\" { yylval->token = new AidlToken(yytext, extra_text);
- return yy::parser::token::C_STR; }
- \/\/.*\n { extra_text += yytext; yylloc->lines(1); yylloc->step(); }
- \n+ { yylloc->lines(yyleng); yylloc->step(); }
- {whitespace} {}
- <<EOF>> { yyterminate(); }
- /* symbols */
- ; { return ';'; }
- \{ { return '{'; }
- \} { return '}'; }
- = { return '='; }
- , { return ','; }
- \. { return '.'; }
- \( { return '('; }
- \) { return ')'; }
- \[ { return '['; }
- \] { return ']'; }
- \< { return '<'; }
- \> { return '>'; }
- /* annotations */
- @{identifier} { yylval->token = new AidlToken(yytext + 1, extra_text);
- return yy::parser::token::ANNOTATION;
- }
- /* keywords */
- parcelable { yylval->token = new AidlToken("parcelable", extra_text);
- return yy::parser::token::PARCELABLE;
- }
- import { return yy::parser::token::IMPORT; }
- package { return yy::parser::token::PACKAGE; }
- in { return yy::parser::token::IN; }
- out { return yy::parser::token::OUT; }
- inout { return yy::parser::token::INOUT; }
- cpp_header { return yy::parser::token::CPP_HEADER; }
- const { return yy::parser::token::CONST; }
- true { return yy::parser::token::TRUE_LITERAL; }
- false { return yy::parser::token::FALSE_LITERAL; }
- interface { yylval->token = new AidlToken("interface", extra_text);
- return yy::parser::token::INTERFACE;
- }
- oneway { yylval->token = new AidlToken("oneway", extra_text);
- return yy::parser::token::ONEWAY;
- }
- /* scalars */
- {identifier} { yylval->token = new AidlToken(yytext, extra_text);
- return yy::parser::token::IDENTIFIER;
- }
- '.' { yylval->character = yytext[1];
- return yy::parser::token::CHARVALUE;
- }
- {intvalue} { yylval->token = new AidlToken(yytext, extra_text);
- return yy::parser::token::INTVALUE; }
- {floatvalue} { yylval->token = new AidlToken(yytext, extra_text);
- return yy::parser::token::FLOATVALUE; }
- {hexvalue} { yylval->token = new AidlToken(yytext, extra_text);
- return yy::parser::token::HEXVALUE; }
- /* lexical error! */
- . { return yy::parser::token::UNKNOWN; }
- %%
- // comment and whitespace handling
- // ================================================
|