blob: 862332c83e52600e4536da11763387edf5a7ab7d [file] [log] [blame]
Adam Lesinskiffa16862014-01-23 18:17:42 -08001%{
Adam Lesinskiffa16862014-01-23 18:17:42 -08002#include <string.h>
3#include <stdlib.h>
Christopher Wileyf690be52015-09-14 15:19:10 -07004
5#include "aidl_language.h"
Ying Wang3000e752016-01-11 18:05:59 -08006#include "aidl_language_y.h"
Adam Lesinskiffa16862014-01-23 18:17:42 -08007
Casey Dahlin1aa158e2015-09-14 15:26:57 -07008#define YY_USER_ACTION yylloc->columns(yyleng);
Adam Lesinskiffa16862014-01-23 18:17:42 -08009%}
10
11%option yylineno
12%option noyywrap
Steven Moreland1cee9db2018-06-28 10:37:24 -070013%option nounput
14%option noinput
Casey Dahlindd691812015-09-09 17:59:06 -070015%option reentrant
16%option bison-bridge
Casey Dahlinfd2e08a2015-09-10 18:29:09 -070017%option bison-locations
Adam Lesinskiffa16862014-01-23 18:17:42 -080018
19%x COPYING LONG_COMMENT
20
Casey Dahlin2b2879b2015-10-13 16:59:44 -070021identifier [_a-zA-Z][_a-zA-Z0-9]*
Casey Dahlin1aa158e2015-09-14 15:26:57 -070022whitespace ([ \t\r]+)
Eino-Ville Talvala661c8082015-12-17 16:37:09 -080023intvalue [-+]?(0|[1-9][0-9]*)
Roshan Pius3b2203d2016-07-22 16:13:20 -070024hexvalue 0[x|X][0-9a-fA-F]+
Steven Moreland1c4ba202018-08-09 10:49:54 -070025floatvalue [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f?
Adam Lesinskiffa16862014-01-23 18:17:42 -080026
27%%
Casey Dahlin1aa158e2015-09-14 15:26:57 -070028%{
29 /* This happens at every call to yylex (every time we receive one token) */
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070030 std::string extra_text;
Casey Dahlin1aa158e2015-09-14 15:26:57 -070031 yylloc->step();
32%}
Adam Lesinskiffa16862014-01-23 18:17:42 -080033
34
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070035\%\%\{ { extra_text += "/**"; BEGIN(COPYING); }
36<COPYING>\}\%\% { extra_text += "**/"; yylloc->step(); BEGIN(INITIAL); }
37<COPYING>.* { extra_text += yytext; }
38<COPYING>\n+ { extra_text += yytext; yylloc->lines(yyleng); }
Adam Lesinskiffa16862014-01-23 18:17:42 -080039
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070040\/\* { extra_text += yytext; BEGIN(LONG_COMMENT); }
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070041<LONG_COMMENT>\*+\/ { extra_text += yytext; yylloc->step(); BEGIN(INITIAL); }
Casey Dahlin88d07842016-01-05 11:54:40 -080042<LONG_COMMENT>\*+ { extra_text += yytext; }
43<LONG_COMMENT>\n+ { extra_text += yytext; yylloc->lines(yyleng); }
44<LONG_COMMENT>[^*\n]+ { extra_text += yytext; }
Adam Lesinskiffa16862014-01-23 18:17:42 -080045
Casey Dahlinbed1e872015-10-22 17:03:34 -070046\"[^\"]*\" { yylval->token = new AidlToken(yytext, extra_text);
47 return yy::parser::token::C_STR; }
48
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070049\/\/.*\n { extra_text += yytext; yylloc->lines(1); yylloc->step(); }
Casey Dahlin1aa158e2015-09-14 15:26:57 -070050
Casey Dahlin3c6df362015-10-06 15:48:35 -070051\n+ { yylloc->lines(yyleng); yylloc->step(); }
52{whitespace} {}
53<<EOF>> { yyterminate(); }
Adam Lesinskiffa16862014-01-23 18:17:42 -080054
Casey Dahlin3c6df362015-10-06 15:48:35 -070055 /* symbols */
Casey Dahlin59401da2015-10-09 18:16:45 -070056; { return ';'; }
Casey Dahlinfb7da2e2015-10-08 17:26:09 -070057\{ { return '{'; }
58\} { return '}'; }
Casey Dahlin3c6df362015-10-06 15:48:35 -070059= { return '='; }
60, { return ','; }
61\. { return '.'; }
62\( { return '('; }
63\) { return ')'; }
64\[ { return '['; }
65\] { return ']'; }
66\< { return '<'; }
67\> { return '>'; }
Casey Dahlin5c69deb2015-10-01 14:44:12 -070068
Steven Morelanded906872018-07-10 11:36:37 -070069 /* annotations */
Jiyong Parka6605ab2018-11-11 14:30:21 +090070@{identifier} { yylval->token = new AidlToken(yytext + 1, extra_text);
Steven Morelanded906872018-07-10 11:36:37 -070071 return yy::parser::token::ANNOTATION;
72 }
73
Adam Lesinskiffa16862014-01-23 18:17:42 -080074 /* keywords */
Jiyong Parka6605ab2018-11-11 14:30:21 +090075parcelable { yylval->token = new AidlToken("parcelable", extra_text);
76 return yy::parser::token::PARCELABLE;
77 }
Casey Dahlin3c6df362015-10-06 15:48:35 -070078import { return yy::parser::token::IMPORT; }
79package { return yy::parser::token::PACKAGE; }
80in { return yy::parser::token::IN; }
81out { return yy::parser::token::OUT; }
82inout { return yy::parser::token::INOUT; }
Casey Dahlincd639212015-12-15 12:51:04 -080083cpp_header { return yy::parser::token::CPP_HEADER; }
Casey Dahlind40e2fe2015-11-24 14:06:52 -080084const { return yy::parser::token::CONST; }
Steven Moreland25294322018-08-07 18:13:55 -070085true { return yy::parser::token::TRUE_LITERAL; }
86false { return yy::parser::token::FALSE_LITERAL; }
Casey Dahlinfd6fb482015-09-30 14:48:18 -070087
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070088interface { yylval->token = new AidlToken("interface", extra_text);
89 return yy::parser::token::INTERFACE;
90 }
91oneway { yylval->token = new AidlToken("oneway", extra_text);
92 return yy::parser::token::ONEWAY;
93 }
94
Casey Dahlin3c6df362015-10-06 15:48:35 -070095 /* scalars */
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070096{identifier} { yylval->token = new AidlToken(yytext, extra_text);
97 return yy::parser::token::IDENTIFIER;
98 }
Steven Moreland25294322018-08-07 18:13:55 -070099'.' { yylval->character = yytext[1];
100 return yy::parser::token::CHARVALUE;
101 }
102{intvalue} { yylval->token = new AidlToken(yytext, extra_text);
Casey Dahlind40e2fe2015-11-24 14:06:52 -0800103 return yy::parser::token::INTVALUE; }
Steven Moreland1c4ba202018-08-09 10:49:54 -0700104{floatvalue} { yylval->token = new AidlToken(yytext, extra_text);
105 return yy::parser::token::FLOATVALUE; }
Roshan Pius3b2203d2016-07-22 16:13:20 -0700106{hexvalue} { yylval->token = new AidlToken(yytext, extra_text);
107 return yy::parser::token::HEXVALUE; }
Adam Lesinskiffa16862014-01-23 18:17:42 -0800108
Steven Moreland2ca4fcb2018-06-27 16:01:01 -0700109 /* lexical error! */
110. { return yy::parser::token::UNKNOWN; }
Adam Lesinskiffa16862014-01-23 18:17:42 -0800111
112%%
113
114// comment and whitespace handling
115// ================================================