blob: 97db049656d2ff2c91270839cbff0a6621c7685d [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
Steven Moreland9c2988f2019-07-17 17:49:10 -070049\/\/.* { extra_text += yytext; extra_text += "\n"; }
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 '>'; }
Andrei Onea07fa3e02019-07-04 17:55:19 +010068\+ { return '+'; }
Casey Dahlin5c69deb2015-10-01 14:44:12 -070069
Steven Morelanded906872018-07-10 11:36:37 -070070 /* annotations */
Jiyong Parka6605ab2018-11-11 14:30:21 +090071@{identifier} { yylval->token = new AidlToken(yytext + 1, extra_text);
Steven Morelanded906872018-07-10 11:36:37 -070072 return yy::parser::token::ANNOTATION;
73 }
74
Adam Lesinskiffa16862014-01-23 18:17:42 -080075 /* keywords */
Jiyong Parka6605ab2018-11-11 14:30:21 +090076parcelable { yylval->token = new AidlToken("parcelable", extra_text);
77 return yy::parser::token::PARCELABLE;
78 }
Casey Dahlin3c6df362015-10-06 15:48:35 -070079import { return yy::parser::token::IMPORT; }
80package { return yy::parser::token::PACKAGE; }
81in { return yy::parser::token::IN; }
82out { return yy::parser::token::OUT; }
83inout { return yy::parser::token::INOUT; }
Casey Dahlincd639212015-12-15 12:51:04 -080084cpp_header { return yy::parser::token::CPP_HEADER; }
Casey Dahlind40e2fe2015-11-24 14:06:52 -080085const { return yy::parser::token::CONST; }
Steven Moreland25294322018-08-07 18:13:55 -070086true { return yy::parser::token::TRUE_LITERAL; }
87false { return yy::parser::token::FALSE_LITERAL; }
Casey Dahlinfd6fb482015-09-30 14:48:18 -070088
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070089interface { yylval->token = new AidlToken("interface", extra_text);
90 return yy::parser::token::INTERFACE;
91 }
92oneway { yylval->token = new AidlToken("oneway", extra_text);
93 return yy::parser::token::ONEWAY;
94 }
95
Casey Dahlin3c6df362015-10-06 15:48:35 -070096 /* scalars */
Casey Dahlincdbbc8c2015-10-14 15:31:04 -070097{identifier} { yylval->token = new AidlToken(yytext, extra_text);
98 return yy::parser::token::IDENTIFIER;
99 }
Steven Moreland25294322018-08-07 18:13:55 -0700100'.' { yylval->character = yytext[1];
101 return yy::parser::token::CHARVALUE;
102 }
103{intvalue} { yylval->token = new AidlToken(yytext, extra_text);
Casey Dahlind40e2fe2015-11-24 14:06:52 -0800104 return yy::parser::token::INTVALUE; }
Steven Moreland1c4ba202018-08-09 10:49:54 -0700105{floatvalue} { yylval->token = new AidlToken(yytext, extra_text);
106 return yy::parser::token::FLOATVALUE; }
Roshan Pius3b2203d2016-07-22 16:13:20 -0700107{hexvalue} { yylval->token = new AidlToken(yytext, extra_text);
108 return yy::parser::token::HEXVALUE; }
Adam Lesinskiffa16862014-01-23 18:17:42 -0800109
Steven Moreland2ca4fcb2018-06-27 16:01:01 -0700110 /* lexical error! */
111. { return yy::parser::token::UNKNOWN; }
Adam Lesinskiffa16862014-01-23 18:17:42 -0800112
113%%
114
115// comment and whitespace handling
116// ================================================