From: Jay Freeman (saurik) Date: Tue, 29 Sep 2009 23:44:55 +0000 (+0000) Subject: Maybe finished lexer. X-Git-Tag: v0.9.432~403 X-Git-Url: https://git.saurik.com/cycript.git/commitdiff_plain/2bf24581b3e1b6e085f041476c59b65ef6d9019a Maybe finished lexer. --- diff --git a/Cycript.l b/Cycript.l index b1aa8a6..1424d1e 100644 --- a/Cycript.l +++ b/Cycript.l @@ -13,10 +13,8 @@ typedef cy::parser::token tk; %option interactive %option reentrant -delim [ \t] -whitesp {delim}+ -digit [0-9] -number [-]?{digit}*[.]?{digit}+ +Exponent [eE][+-]?[0-9]+ +Escape \\['"\\bfnrtv]|\\0|\\x[0-9a-fA-F]{2}|\\u[0-9a-fA-F]{4} %% @@ -104,7 +102,14 @@ number [-]?{digit}*[.]?{digit}+ "with" return tk::With; [a-zA-Z$_][a-zA-Z$_0-9]* return tk::Identifier; -[0-9]+ return tk::NumericLiteral; + +(\.[0-9]+|(0|[1-9][0-9]*)(\.[0-9]*)?){Exponent}? return tk::NumericLiteral; + +0[xX][0-9a-fA-F]+ return tk::NumericLiteral; +0[bB][0-1]+ return tk::NumericLiteral; + +\"([^"\\\n]|{Escape})*\" return tk::StringLiteral; +'([^'\\\n]|{Escape})*' return tk::StringLiteral; [ \t\n] ; diff --git a/Cycript.y b/Cycript.y index 0ecb777..0cfbe6e 100644 --- a/Cycript.y +++ b/Cycript.y @@ -120,6 +120,43 @@ int cylex(YYSTYPE *lvalp, YYLTYPE *llocp, void *scanner); %start Program; +WordOpt + : Word + | + ; + +Word + : Identifier + | "break" + | "case" + | "catch" + | "continue" + | "default" + | "delete" + | "do" + | "else" + | "false" + | "finally" + | "for" + | "function" + | "if" + | "in" + | "instanceof" + | "new" + | "null" + | "return" + | "switch" + | "this" + | "throw" + | "true" + | "try" + | "typeof" + | "var" + | "void" + | "while" + | "with" + ; + IdentifierOpt : Identifier | @@ -153,12 +190,12 @@ SelectorCall_ ; SelectorCall - : IdentifierOpt ":" AssignmentExpression SelectorCall_ + : WordOpt ":" AssignmentExpression SelectorCall_ ; SelectorList : SelectorCall - | Identifier + | Word ; ObjectiveCall