]> git.saurik.com Git - cycript.git/blame - Cycript.l
Connected the console back together.
[cycript.git] / Cycript.l
CommitLineData
e5332278 1%{
63b4c5a8
JF
2#include "Cycript.tab.hh"
3typedef cy::parser::token tk;
5999c315 4#define YY_EXTRA_TYPE CYDriver *
e5332278
JF
5%}
6
7%option prefix="cy"
8%option bison-bridge
9%option bison-locations
10%option noyywrap
11%option yylineno
12%option nounput
13%option interactive
924f67b2 14%option reentrant
e5332278 15
2bf24581
JF
16Exponent [eE][+-]?[0-9]+
17Escape \\['"\\bfnrtv]|\\0|\\x[0-9a-fA-F]{2}|\\u[0-9a-fA-F]{4}
e5332278
JF
18
19%%
20
63b4c5a8
JF
21"&" return tk::Ampersand;
22"&&" return tk::AmpersandAmpersand;
23"&=" return tk::AmpersandEqual;
24"^" return tk::Carrot;
25"^=" return tk::CarrotEqual;
26"=" return tk::Equal;
27"==" return tk::EqualEqual;
28"===" return tk::EqualEqualEqual;
29"!" return tk::Exclamation;
30"!=" return tk::ExclamationEqual;
31"!==" return tk::ExclamationEqualEqual;
32"-" return tk::Hyphen;
33"-=" return tk::HyphenEqual;
34"--" return tk::HyphenHyphen;
35"->" return tk::HyphenRight;
36"<" return tk::Left;
37"<=" return tk::LeftEqual;
38"<<" return tk::LeftLeft;
39"<<=" return tk::LeftLeftEqual;
40"%" return tk::Percent;
41"%=" return tk::PercentEqual;
42"." return tk::Period;
43"|" return tk::Pipe;
44"|=" return tk::PipeEqual;
45"||" return tk::PipePipe;
46"+" return tk::Plus;
47"+=" return tk::PlusEqual;
48"++" return tk::PlusPlus;
49">" return tk::Right;
50">=" return tk::RightEqual;
51">>" return tk::RightRight;
52">>=" return tk::RightRightEqual;
53">>>" return tk::RightRightRight;
54">>>=" return tk::RightRightRightEqual;
55"/" return tk::Slash;
56"/=" return tk::SlashEqual;
57"*" return tk::Star;
58"*=" return tk::StarEqual;
59"~" return tk::Tilde;
e5332278 60
63b4c5a8
JF
61":" return tk::Colon;
62"," return tk::Comma;
63"?" return tk::Question;
64";" return tk::SemiColon;
1dbba6cc 65
63b4c5a8
JF
66"(" return tk::OpenParen;
67")" return tk::CloseParen;
924f67b2 68
63b4c5a8
JF
69"{" return tk::OpenBrace;
70"}" return tk::CloseBrace;
924f67b2 71
63b4c5a8
JF
72"[" return tk::OpenBracket;
73"]" return tk::CloseBracket;
1dbba6cc 74
5999c315
JF
75"break" yylval->word_ = new CYWord("break"); return tk::Break;
76"case" yylval->word_ = new CYWord("case"); return tk::Case;
77"catch" yylval->word_ = new CYWord("catch"); return tk::Catch;
78"continue" yylval->word_ = new CYWord("continue"); return tk::Continue;
79"default" yylval->word_ = new CYWord("default"); return tk::Default;
80"delete" yylval->word_ = new CYWord("delete"); return tk::Delete;
81"do" yylval->word_ = new CYWord("do"); return tk::Do;
82"else" yylval->word_ = new CYWord("else"); return tk::Else;
83"false" yylval->false_ = new CYFalse(); return tk::False;
84"finally" yylval->word_ = new CYWord("finally"); return tk::Finally;
85"for" yylval->word_ = new CYWord("for"); return tk::For;
86"function" yylval->word_ = new CYWord("function"); return tk::Function;
87"if" yylval->word_ = new CYWord("if"); return tk::If;
88"in" yylval->word_ = new CYWord("in"); return tk::In;
89"instanceof" yylval->word_ = new CYWord("instanceof"); return tk::InstanceOf;
90"new" yylval->word_ = new CYWord("new"); return tk::New;
91"null" yylval->null_ = new CYNull(); return tk::Null;
92"return" yylval->word_ = new CYWord("return"); return tk::Return;
93"switch" yylval->word_ = new CYWord("switch"); return tk::Switch;
94"this" yylval->this_ = new CYThis(); return tk::This;
95"throw" yylval->word_ = new CYWord("throw"); return tk::Throw;
96"true" yylval->true_ = new CYTrue(); return tk::True;
97"try" yylval->word_ = new CYWord("try"); return tk::Try;
98"typeof" yylval->word_ = new CYWord("typeof"); return tk::TypeOf;
99"var" yylval->word_ = new CYWord("var"); return tk::Var;
100"void" yylval->word_ = new CYWord("void"); return tk::Void;
101"while" yylval->word_ = new CYWord("while"); return tk::While;
102"with" yylval->word_ = new CYWord("with"); return tk::With;
103
104[a-zA-Z$_][a-zA-Z$_0-9]* yylval->identifier_ = new CYIdentifier(apr_pstrmemdup(yyextra->pool_, yytext, yyleng)); return tk::Identifier;
105
106(\.[0-9]+|(0|[1-9][0-9]*)(\.[0-9]*)?){Exponent}? yylval->number_ = new CYNumber(strtod(yytext, NULL)); return tk::NumericLiteral;
107
1080[xX][0-9a-fA-F]+ yylval->number_ = new CYNumber(strtoull(yytext + 2, NULL, 16)); return tk::NumericLiteral;
109
1100[bB][0-1]+ yylval->number_ = new CYNumber(strtoull(yytext + 2, NULL, 2)); return tk::NumericLiteral;
2bf24581
JF
111
112\"([^"\\\n]|{Escape})*\" return tk::StringLiteral;
5999c315 113'([^'\\\n]|{Escape})*' return tk::StringLiteral;
1dbba6cc 114
5999c315 115[ \t\n] ;
924f67b2
JF
116
117%%
118
5999c315 119void CYDriver::ScannerInit() {
924f67b2
JF
120 cylex_init(&scanner_);
121 cyset_extra(this, scanner_);
122}
123
5999c315 124void CYDriver::ScannerDestroy() {
924f67b2
JF
125 cylex_destroy(scanner_);
126}