parser updated

This commit is contained in:
Guido Ranzuglia granzuglia 2012-02-20 17:38:50 +00:00
parent 5393f45871
commit 40cd62addc
8 changed files with 1509 additions and 4067 deletions

File diff suppressed because it is too large Load Diff

View File

@ -7,98 +7,36 @@ class js_grammar
public:
enum VariousConstants {
EOF_SYMBOL = 0,
T_AND = 1,
T_AND_AND = 2,
T_AND_EQ = 3,
T_BREAK = 4,
T_CASE = 5,
T_CATCH = 6,
T_COLON = 7,
T_COMMA = 8,
T_CONST = 79,
T_CONTINUE = 9,
T_DEBUGGER = 80,
T_DEFAULT = 10,
T_DELETE = 11,
T_DIVIDE_ = 12,
T_DIVIDE_EQ = 13,
T_DO = 14,
T_DOT = 15,
T_ELSE = 16,
T_EQ = 17,
T_EQ_EQ = 18,
T_EQ_EQ_EQ = 19,
T_FALSE = 78,
T_FINALLY = 20,
T_FOR = 21,
T_FUNCTION = 22,
T_GE = 23,
T_GT = 24,
T_GT_GT = 25,
T_GT_GT_EQ = 26,
T_GT_GT_GT = 27,
T_GT_GT_GT_EQ = 28,
T_IDENTIFIER = 29,
T_IF = 30,
T_IN = 31,
T_INSTANCEOF = 32,
T_LBRACE = 33,
T_LBRACKET = 34,
T_LE = 35,
T_LPAREN = 36,
T_LT = 37,
T_LT_LT = 38,
T_LT_LT_EQ = 39,
T_MINUS = 40,
T_MINUS_EQ = 41,
T_MINUS_MINUS = 42,
T_NEW = 43,
T_NOT = 44,
T_NOT_EQ = 45,
T_NOT_EQ_EQ = 46,
T_NULL = 76,
T_NUMERIC_LITERAL = 81,
T_OR = 47,
T_OR_EQ = 48,
T_OR_OR = 49,
T_PLUS = 50,
T_PLUS_EQ = 51,
T_PLUS_PLUS = 52,
T_QUESTION = 53,
T_RBRACE = 54,
T_RBRACKET = 55,
T_REMAINDER = 56,
T_REMAINDER_EQ = 57,
T_RESERVED_WORD = 82,
T_RETURN = 58,
T_RPAREN = 59,
T_SEMICOLON = 60,
T_STAR = 61,
T_STAR_EQ = 62,
T_STRING_LITERAL = 63,
T_SWITCH = 64,
T_THIS = 65,
T_THROW = 66,
T_TILDE = 67,
T_TRUE = 77,
T_TRY = 68,
T_TYPEOF = 69,
T_VAR = 70,
T_VOID = 71,
T_WHILE = 72,
T_WITH = 73,
T_XOR = 74,
T_XOR_EQ = 75,
T_COLON = 1,
T_COMMA = 2,
T_CONST = 19,
T_DOT = 3,
T_EQ = 4,
T_FUNCTION = 5,
T_IDENTIFIER = 6,
T_LBRACE = 7,
T_LBRACKET = 8,
T_LPAREN = 9,
T_NEW = 10,
T_NULL = 17,
T_NUMERIC_LITERAL = 20,
T_RBRACE = 11,
T_RBRACKET = 12,
T_RPAREN = 13,
T_SEMICOLON = 14,
T_STRING_LITERAL = 15,
T_THIS = 16,
T_VAR = 18,
ACCEPT_STATE = 236,
RULE_COUNT = 259,
STATE_COUNT = 458,
TERMINAL_COUNT = 83,
NON_TERMINAL_COUNT = 88,
ACCEPT_STATE = 3,
RULE_COUNT = 62,
STATE_COUNT = 107,
TERMINAL_COUNT = 21,
NON_TERMINAL_COUNT = 36,
GOTO_INDEX_OFFSET = 458,
GOTO_INFO_OFFSET = 1442,
GOTO_CHECK_OFFSET = 1442
GOTO_INDEX_OFFSET = 107,
GOTO_INFO_OFFSET = 109,
GOTO_CHECK_OFFSET = 109
};
static const char *const spell [];

View File

@ -25,85 +25,84 @@ icst ({dec}|0{oct}*|0[xX]{hex}+)
%%
"&&" {return T_AND_AND;}
"&=" {return T_AND_EQ;}
"&" {return T_AND;}
"break" {return T_BREAK;}
"case" {return T_CASE;}
"catch" {return T_CATCH;}
"&&" {}
"&=" {}
"&" {}
"break" {}
"case" {}
"catch" {}
":" {return T_COLON;}
"," {return T_COMMA;}
"continue" {return T_CONTINUE;}
"default" {return T_DEFAULT;}
"delete" {return T_DELETE;}
"/=" {return T_DIVIDE_EQ;}
"/" {return T_DIVIDE_;}
"do" {return T_DO;}
"continue" {}
"default" {}
"delete" {}
"/=" {}
"/" {}
"do" {}
"." {return T_DOT;}
"else" {return T_ELSE;}
"===" {return T_EQ_EQ_EQ;}
"==" {return T_EQ_EQ;}
"else" {}
"===" {}
"==" {}
"=" {return T_EQ;}
"finally" {return T_FINALLY;}
"for" {return T_FOR;}
"finally" {}
"for" {}
"function" {return T_FUNCTION;}
">>>=" {return T_GT_GT_GT_EQ;}
">>=" {return T_GT_GT_EQ;}
">=" {return T_GE;}
">>" {return T_GT_GT;}
">" {return T_GT;}
"if" {return T_IF;}
"in" {return T_IN;}
"instanceof" {return T_INSTANCEOF;}
"{" {return T_LBRACE;}
"[" {return T_LBRACKET;}
"<<=" {return T_LT_LT_EQ;}
"<<" {return T_LT_LT;}
"<=" {return T_LE;}
"<" {return T_LT;}
">>>=" {}
">>=" {}
">=" {}
">>" {}
">" {}
"if" {}
"in" {}
"instanceof" {}
"{" {return T_LBRACKET;}
"[" {return T_LBRACE;}
"<<=" {}
"<<" {}
"<=" {}
"<" {}
"(" {return T_LPAREN;}
"--" {return T_MINUS_MINUS;}
"-=" {return T_MINUS_EQ;}
"-" {return T_MINUS;}
"--" {}
"-=" {}
"-" {}
"new" {return T_NEW;}
"!==" {return T_NOT_EQ_EQ;}
"!=" {return T_NOT_EQ;}
"!" {return T_NOT;}
"|=" {return T_OR_EQ;}
"||" {return T_OR_OR;}
"|" {return T_OR;}
"+=" {return T_PLUS_EQ;}
"++" {return T_PLUS_PLUS;}
"+" {return T_PLUS;}
"?" {return T_QUESTION;}
"}" {return T_RBRACE;}
"]" {return T_RBRACKET;}
"%=" {return T_REMAINDER_EQ;}
"%" {return T_REMAINDER;}
"return" {return T_RETURN;}
"!==" {}
"!=" {}
"!" {}
"|=" {}
"||" {}
"|" {}
"+=" {}
"++" {}
"+" {}
"?" {}
"}" {return T_RBRACKET;}
"]" {return T_RBRACE;}
"%=" {}
"%" {}
"return" {}
")" {return T_RPAREN;}
";" {return T_SEMICOLON;}
"*=" {return T_STAR_EQ;}
"*" {return T_STAR;}
"*=" {}
"*" {}
"/"([^"\\]|\\.)*"/" {return T_STRING_LITERAL;}
"switch" {return T_SWITCH;}
"switch" {}
"this" {return T_THIS;}
"throw" {return T_THROW;}
"~" {return T_TILDE;}
"try" {return T_TRY;}
"typeof" {return T_TYPEOF;}
"throw" {}
"~" {}
"try" {}
"typeof" {}
"var" {return T_VAR;}
"void" {return T_VOID;}
"while" {return T_WHILE;}
"with" {return T_WITH;}
"^=" {return T_XOR_EQ;}
"^" {return T_XOR;}
"void" {}
"while" {}
"with" {}
"^=" {}
"^" {}
"null" {return T_NULL;}
"true" {return T_TRUE;}
"false" {return T_FALSE;}
"true" {}
"false" {}
"const" {return T_CONST;}
"debugger" {return T_DEBUGGER;}
"reserved" {return T_RESERVED_WORD;}
{icst} {yyval.i = QString(yytext).toInt();return T_NUMERIC_LITERAL;}
{icst}[uU] {yyval.u = QString(yytext).toUInt();return T_NUMERIC_LITERAL;}
{icst}[uU][lL] {yyval.ul = QString(yytext).toULong();return T_NUMERIC_LITERAL;}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,45 +1,37 @@
#line 90 "js_parser.g"
#ifndef JS_PARSER_H
#define JS_PARSER_H
#include "qparser.h"
#include <QtCore>
#include "js_grammar_p.h"
union UnionValue
{
int i;
unsigned u;
unsigned long ul;
unsigned long long ull;
long l;
double d;
float f;
const QString *s;
};
class JSParser: public QParser<JSParser, js_grammar,UnionValue>
{
public:
JSParser();
int nextToken();
void consumeRule(int ruleno);
const QString *insert(const QString &s);
protected:
QSet<QString> string_repository;
QSet<const QString*> types;
};
#endif // JS_PARSER_H
#line 192 "js_parser.g"
#define Q_SCRIPT_REGEXPLITERAL_RULE1 7
#line 201 "js_parser.g"
#define Q_SCRIPT_REGEXPLITERAL_RULE2 8
#line 28 "js_parser.g"
#ifndef JS_PARSER_H
#define JS_PARSER_H
#include "qparser.h"
#include <QtCore>
#include "js_grammar_p.h"
union UnionValue
{
int i;
unsigned u;
unsigned long ul;
unsigned long long ull;
long l;
double d;
float f;
const QString *s;
};
class JSParser: public QParser<JSParser, js_grammar,UnionValue>
{
public:
JSParser();
int nextToken();
void consumeRule(int ruleno);
const QString *insert(const QString &s);
protected:
QSet<QString> string_repository;
QSet<const QString*> types;
QSet<QString> functions;
};
#endif // JS_PARSER_H

View File

@ -98,7 +98,7 @@ bool QParser<_Parser, _Table, _Value>::parse()
else if (act < 0) {
int r = - act - 1;
qDebug() << "reducing using rule: " << spell[rule_info[rule_index[r]]] << "\n";
//qDebug() << "reducing using rule: " << spell[rule_info[rule_index[r]]] << "\n";
d->tos -= _Table::rhs[r];
act = d->stateStack[d->tos++];
consumeRule(r);