]>
Commit | Line | Data |
---|---|---|
e5332278 | 1 | %{ |
63b4c5a8 JF |
2 | #include "Cycript.tab.hh" |
3 | typedef 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 |
16 | Exponent [eE][+-]?[0-9]+ |
17 | Escape \\['"\\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 | ||
108 | 0[xX][0-9a-fA-F]+ yylval->number_ = new CYNumber(strtoull(yytext + 2, NULL, 16)); return tk::NumericLiteral; | |
109 | ||
110 | 0[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 | 119 | void CYDriver::ScannerInit() { |
924f67b2 JF |
120 | cylex_init(&scanner_); |
121 | cyset_extra(this, scanner_); | |
122 | } | |
123 | ||
5999c315 | 124 | void CYDriver::ScannerDestroy() { |
924f67b2 JF |
125 | cylex_destroy(scanner_); |
126 | } |