source: trunk/src/script/parser/qscript.g@ 780

Last change on this file since 780 was 651, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.2 sources.

  • Property svn:eol-style set to native
File size: 62.4 KB
Line 
1----------------------------------------------------------------------------
2--
3-- Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4-- All rights reserved.
5-- Contact: Nokia Corporation ([email protected])
6--
7-- This file is part of the QtScript module of the Qt Toolkit.
8--
9-- $QT_BEGIN_LICENSE:LGPL-ONLY$
10-- GNU Lesser General Public License Usage
11-- This file may be used under the terms of the GNU Lesser
12-- General Public License version 2.1 as published by the Free Software
13-- Foundation and appearing in the file LICENSE.LGPL included in the
14-- packaging of this file. Please review the following information to
15-- ensure the GNU Lesser General Public License version 2.1 requirements
16-- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17--
18-- If you have questions regarding the use of this file, please contact
19-- Nokia at [email protected].
20-- $QT_END_LICENSE$
21--
22----------------------------------------------------------------------------
23
24%parser QScriptGrammar
25%decl qscriptparser_p.h
26%impl qscriptparser.cpp
27%expect 3
28%expect-rr 1
29
30%token T_AND "&" T_AND_AND "&&" T_AND_EQ "&="
31%token T_BREAK "break" T_CASE "case" T_CATCH "catch"
32%token T_COLON ":" T_COMMA ";" T_CONTINUE "continue"
33%token T_DEFAULT "default" T_DELETE "delete" T_DIVIDE_ "/"
34%token T_DIVIDE_EQ "/=" T_DO "do" T_DOT "."
35%token T_ELSE "else" T_EQ "=" T_EQ_EQ "=="
36%token T_EQ_EQ_EQ "===" T_FINALLY "finally" T_FOR "for"
37%token T_FUNCTION "function" T_GE ">=" T_GT ">"
38%token T_GT_GT ">>" T_GT_GT_EQ ">>=" T_GT_GT_GT ">>>"
39%token T_GT_GT_GT_EQ ">>>=" T_IDENTIFIER "identifier" T_IF "if"
40%token T_IN "in" T_INSTANCEOF "instanceof" T_LBRACE "{"
41%token T_LBRACKET "[" T_LE "<=" T_LPAREN "("
42%token T_LT "<" T_LT_LT "<<" T_LT_LT_EQ "<<="
43%token T_MINUS "-" T_MINUS_EQ "-=" T_MINUS_MINUS "--"
44%token T_NEW "new" T_NOT "!" T_NOT_EQ "!="
45%token T_NOT_EQ_EQ "!==" T_NUMERIC_LITERAL "numeric literal" T_OR "|"
46%token T_OR_EQ "|=" T_OR_OR "||" T_PLUS "+"
47%token T_PLUS_EQ "+=" T_PLUS_PLUS "++" T_QUESTION "?"
48%token T_RBRACE "}" T_RBRACKET "]" T_REMAINDER "%"
49%token T_REMAINDER_EQ "%=" T_RETURN "return" T_RPAREN ")"
50%token T_SEMICOLON ";" T_AUTOMATIC_SEMICOLON T_STAR "*"
51%token T_STAR_EQ "*=" T_STRING_LITERAL "string literal"
52%token T_SWITCH "switch" T_THIS "this" T_THROW "throw"
53%token T_TILDE "~" T_TRY "try" T_TYPEOF "typeof"
54%token T_VAR "var" T_VOID "void" T_WHILE "while"
55%token T_WITH "with" T_XOR "^" T_XOR_EQ "^="
56%token T_NULL "null" T_TRUE "true" T_FALSE "false"
57%token T_CONST "const"
58%token T_DEBUGGER "debugger"
59%token T_RESERVED_WORD "reserved word"
60
61%start Program
62
63/./****************************************************************************
64**
65** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
66** All rights reserved.
67** Contact: Nokia Corporation ([email protected])
68**
69** This file is part of the QtScript module of the Qt Toolkit.
70**
71** $QT_BEGIN_LICENSE:LGPL$
72** Commercial Usage
73** Licensees holding valid Qt Commercial licenses may use this file in
74** accordance with the Qt Commercial License Agreement provided with the
75** Software or, alternatively, in accordance with the terms contained in
76** a written agreement between you and Nokia.
77**
78** GNU Lesser General Public License Usage
79** Alternatively, this file may be used under the terms of the GNU Lesser
80** General Public License version 2.1 as published by the Free Software
81** Foundation and appearing in the file LICENSE.LGPL included in the
82** packaging of this file. Please review the following information to
83** ensure the GNU Lesser General Public License version 2.1 requirements
84** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
85**
86** In addition, as a special exception, Nokia gives you certain additional
87** rights. These rights are described in the Nokia Qt LGPL Exception
88** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
89**
90** GNU General Public License Usage
91** Alternatively, this file may be used under the terms of the GNU
92** General Public License version 3.0 as published by the Free Software
93** Foundation and appearing in the file LICENSE.GPL included in the
94** packaging of this file. Please review the following information to
95** ensure the GNU General Public License version 3.0 requirements will be
96** met: http://www.gnu.org/copyleft/gpl.html.
97**
98** If you have questions regarding the use of this file, please contact
99** Nokia at [email protected].
100** $QT_END_LICENSE$
101**
102****************************************************************************/
103
104// This file was generated by qlalr - DO NOT EDIT!
105
106
107#include <QtCore/QtDebug>
108
109#include <string.h>
110
111#define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \
112 node->startLine = startloc.startLine; \
113 node->startColumn = startloc.startColumn; \
114 node->endLine = endloc.endLine; \
115 node->endColumn = endloc.endColumn; \
116} while (0)
117
118./
119
120/:/****************************************************************************
121**
122** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
123** All rights reserved.
124** Contact: Nokia Corporation ([email protected])
125**
126** This file is part of the QtScript module of the Qt Toolkit.
127**
128** $QT_BEGIN_LICENSE:LGPL$
129** Commercial Usage
130** Licensees holding valid Qt Commercial licenses may use this file in
131** accordance with the Qt Commercial License Agreement provided with the
132** Software or, alternatively, in accordance with the terms contained in
133** a written agreement between you and Nokia.
134**
135** GNU Lesser General Public License Usage
136** Alternatively, this file may be used under the terms of the GNU Lesser
137** General Public License version 2.1 as published by the Free Software
138** Foundation and appearing in the file LICENSE.LGPL included in the
139** packaging of this file. Please review the following information to
140** ensure the GNU Lesser General Public License version 2.1 requirements
141** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
142**
143** In addition, as a special exception, Nokia gives you certain additional
144** rights. These rights are described in the Nokia Qt LGPL Exception
145** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
146**
147** GNU General Public License Usage
148** Alternatively, this file may be used under the terms of the GNU
149** General Public License version 3.0 as published by the Free Software
150** Foundation and appearing in the file LICENSE.GPL included in the
151** packaging of this file. Please review the following information to
152** ensure the GNU General Public License version 3.0 requirements will be
153** met: http://www.gnu.org/copyleft/gpl.html.
154**
155** If you have questions regarding the use of this file, please contact
156** Nokia at [email protected].
157** $QT_END_LICENSE$
158**
159****************************************************************************/
160
161// This file was generated by qlalr - DO NOT EDIT!
162
163
164//
165// W A R N I N G
166// -------------
167//
168// This file is not part of the Qt API. It exists purely as an
169// implementation detail. This header file may change from version to
170// version without notice, or even be removed.
171//
172// We mean it.
173//
174
175//
176// This file is automatically generated from qscript.g.
177// Changes will be lost.
178//
179
180#ifndef QSCRIPTPARSER_P_H
181#define QSCRIPTPARSER_P_H
182
183#include "qscriptgrammar_p.h"
184
185#include "qscriptastfwd_p.h"
186
187QT_BEGIN_NAMESPACE
188
189class QString;
190class QScriptEnginePrivate;
191class QScriptNameIdImpl;
192
193class QScriptParser: protected $table
194{
195public:
196 union Value {
197 int ival;
198 double dval;
199 QScriptNameIdImpl *sval;
200 QScript::AST::ArgumentList *ArgumentList;
201 QScript::AST::CaseBlock *CaseBlock;
202 QScript::AST::CaseClause *CaseClause;
203 QScript::AST::CaseClauses *CaseClauses;
204 QScript::AST::Catch *Catch;
205 QScript::AST::DefaultClause *DefaultClause;
206 QScript::AST::ElementList *ElementList;
207 QScript::AST::Elision *Elision;
208 QScript::AST::ExpressionNode *Expression;
209 QScript::AST::Finally *Finally;
210 QScript::AST::FormalParameterList *FormalParameterList;
211 QScript::AST::FunctionBody *FunctionBody;
212 QScript::AST::FunctionDeclaration *FunctionDeclaration;
213 QScript::AST::Node *Node;
214 QScript::AST::PropertyName *PropertyName;
215 QScript::AST::PropertyNameAndValueList *PropertyNameAndValueList;
216 QScript::AST::SourceElement *SourceElement;
217 QScript::AST::SourceElements *SourceElements;
218 QScript::AST::Statement *Statement;
219 QScript::AST::StatementList *StatementList;
220 QScript::AST::VariableDeclaration *VariableDeclaration;
221 QScript::AST::VariableDeclarationList *VariableDeclarationList;
222 };
223
224 struct Location {
225 int startLine;
226 int startColumn;
227 int endLine;
228 int endColumn;
229 };
230
231public:
232 QScriptParser();
233 ~QScriptParser();
234
235 bool parse(QScriptEnginePrivate *driver);
236
237 inline QString errorMessage() const
238 { return error_message; }
239 inline int errorLineNumber() const
240 { return error_lineno; }
241 inline int errorColumnNumber() const
242 { return error_column; }
243
244protected:
245 inline void reallocateStack();
246
247 inline Value &sym(int index)
248 { return sym_stack [tos + index - 1]; }
249
250 inline Location &loc(int index)
251 { return location_stack [tos + index - 2]; }
252
253protected:
254 int tos;
255 int stack_size;
256 Value *sym_stack;
257 int *state_stack;
258 Location *location_stack;
259 QString error_message;
260 int error_lineno;
261 int error_column;
262};
263
264inline void QScriptParser::reallocateStack()
265{
266 if (! stack_size)
267 stack_size = 128;
268 else
269 stack_size <<= 1;
270
271 sym_stack = reinterpret_cast<Value*> (qRealloc(sym_stack, stack_size * sizeof(Value)));
272 state_stack = reinterpret_cast<int*> (qRealloc(state_stack, stack_size * sizeof(int)));
273 location_stack = reinterpret_cast<Location*> (qRealloc(location_stack, stack_size * sizeof(Location)));
274}
275
276:/
277
278
279/.
280
281#include "qscriptparser_p.h"
282
283//
284// This file is automatically generated from qscript.g.
285// Changes will be lost.
286//
287
288QT_BEGIN_NAMESPACE
289
290inline static bool automatic(QScriptEnginePrivate *driver, int token)
291{
292 return token == $table::T_RBRACE
293 || token == 0
294 || driver->lexer()->prevTerminator();
295}
296
297
298QScriptParser::QScriptParser():
299 tos(0),
300 stack_size(0),
301 sym_stack(0),
302 state_stack(0),
303 location_stack(0)
304{
305}
306
307QScriptParser::~QScriptParser()
308{
309 if (stack_size) {
310 qFree(sym_stack);
311 qFree(state_stack);
312 qFree(location_stack);
313 }
314}
315
316static inline QScriptParser::Location location(QScript::Lexer *lexer)
317{
318 QScriptParser::Location loc;
319 loc.startLine = lexer->startLineNo();
320 loc.startColumn = lexer->startColumnNo();
321 loc.endLine = lexer->endLineNo();
322 loc.endColumn = lexer->endColumnNo();
323 return loc;
324}
325
326bool QScriptParser::parse(QScriptEnginePrivate *driver)
327{
328 const int INITIAL_STATE = 0;
329 QScript::Lexer *lexer = driver->lexer();
330
331 int yytoken = -1;
332 int saved_yytoken = -1;
333
334 reallocateStack();
335
336 tos = 0;
337 state_stack[++tos] = INITIAL_STATE;
338
339 while (true)
340 {
341 const int state = state_stack [tos];
342 if (yytoken == -1 && - TERMINAL_COUNT != action_index [state])
343 {
344 if (saved_yytoken == -1)
345 {
346 yytoken = lexer->lex();
347 location_stack [tos] = location(lexer);
348 }
349 else
350 {
351 yytoken = saved_yytoken;
352 saved_yytoken = -1;
353 }
354 }
355
356 int act = t_action (state, yytoken);
357
358 if (act == ACCEPT_STATE)
359 return true;
360
361 else if (act > 0)
362 {
363 if (++tos == stack_size)
364 reallocateStack();
365
366 sym_stack [tos].dval = lexer->dval ();
367 state_stack [tos] = act;
368 location_stack [tos] = location(lexer);
369 yytoken = -1;
370 }
371
372 else if (act < 0)
373 {
374 int r = - act - 1;
375
376 tos -= rhs [r];
377 act = state_stack [tos++];
378
379 switch (r) {
380./
381
382PrimaryExpression: T_THIS ;
383/.
384case $rule_number: {
385 sym(1).Node = QScript::makeAstNode<QScript::AST::ThisExpression> (driver->nodePool());
386 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
387} break;
388./
389
390PrimaryExpression: T_IDENTIFIER ;
391/.
392case $rule_number: {
393 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierExpression> (driver->nodePool(), sym(1).sval);
394 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
395} break;
396./
397
398PrimaryExpression: T_NULL ;
399/.
400case $rule_number: {
401 sym(1).Node = QScript::makeAstNode<QScript::AST::NullExpression> (driver->nodePool());
402 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
403} break;
404./
405
406PrimaryExpression: T_TRUE ;
407/.
408case $rule_number: {
409 sym(1).Node = QScript::makeAstNode<QScript::AST::TrueLiteral> (driver->nodePool());
410 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
411} break;
412./
413
414PrimaryExpression: T_FALSE ;
415/.
416case $rule_number: {
417 sym(1).Node = QScript::makeAstNode<QScript::AST::FalseLiteral> (driver->nodePool());
418 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
419} break;
420./
421
422PrimaryExpression: T_NUMERIC_LITERAL ;
423/.
424case $rule_number: {
425 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteral> (driver->nodePool(), sym(1).dval);
426 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
427} break;
428./
429
430PrimaryExpression: T_STRING_LITERAL ;
431/.
432case $rule_number: {
433 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteral> (driver->nodePool(), sym(1).sval);
434 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
435} break;
436./
437
438PrimaryExpression: T_DIVIDE_ ;
439/:
440#define Q_SCRIPT_REGEXPLITERAL_RULE1 $rule_number
441:/
442/.
443case $rule_number: {
444 bool rx = lexer->scanRegExp(QScript::Lexer::NoPrefix);
445 if (!rx) {
446 error_message = lexer->errorMessage();
447 error_lineno = lexer->startLineNo();
448 error_column = lexer->startColumnNo();
449 return false;
450 }
451 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
452 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
453} break;
454./
455
456PrimaryExpression: T_DIVIDE_EQ ;
457/:
458#define Q_SCRIPT_REGEXPLITERAL_RULE2 $rule_number
459:/
460/.
461case $rule_number: {
462 bool rx = lexer->scanRegExp(QScript::Lexer::EqualPrefix);
463 if (!rx) {
464 error_message = lexer->errorMessage();
465 error_lineno = lexer->startLineNo();
466 error_column = lexer->startColumnNo();
467 return false;
468 }
469 sym(1).Node = QScript::makeAstNode<QScript::AST::RegExpLiteral> (driver->nodePool(), lexer->pattern, lexer->flags);
470 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
471} break;
472./
473
474PrimaryExpression: T_LBRACKET ElisionOpt T_RBRACKET ;
475/.
476case $rule_number: {
477 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).Elision);
478 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
479} break;
480./
481
482PrimaryExpression: T_LBRACKET ElementList T_RBRACKET ;
483/.
484case $rule_number: {
485 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish ());
486 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
487} break;
488./
489
490PrimaryExpression: T_LBRACKET ElementList T_COMMA ElisionOpt T_RBRACKET ;
491/.
492case $rule_number: {
493 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayLiteral> (driver->nodePool(), sym(2).ElementList->finish (), sym(4).Elision);
494 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
495} break;
496./
497
498-- PrimaryExpression: T_LBRACE T_RBRACE ;
499-- /.
500-- case $rule_number: {
501-- sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
502-- Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
503-- } break;
504-- ./
505
506PrimaryExpression: T_LBRACE PropertyNameAndValueListOpt T_RBRACE ;
507/.
508case $rule_number: {
509 if (sym(2).Node)
510 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
511 else
512 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool());
513 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
514} break;
515./
516
517PrimaryExpression: T_LBRACE PropertyNameAndValueList T_COMMA T_RBRACE ;
518/.
519case $rule_number: {
520 sym(1).Node = QScript::makeAstNode<QScript::AST::ObjectLiteral> (driver->nodePool(), sym(2).PropertyNameAndValueList->finish ());
521 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
522} break;
523./
524
525PrimaryExpression: T_LPAREN Expression T_RPAREN ;
526/.
527case $rule_number: {
528 sym(1) = sym(2);
529 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
530} break;
531./
532
533ElementList: ElisionOpt AssignmentExpression ;
534/.
535case $rule_number: {
536 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).Elision, sym(2).Expression);
537 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
538} break;
539./
540
541ElementList: ElementList T_COMMA ElisionOpt AssignmentExpression ;
542/.
543case $rule_number: {
544 sym(1).Node = QScript::makeAstNode<QScript::AST::ElementList> (driver->nodePool(), sym(1).ElementList, sym(3).Elision, sym(4).Expression);
545 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
546} break;
547./
548
549Elision: T_COMMA ;
550/.
551case $rule_number: {
552 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool());
553 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
554} break;
555./
556
557Elision: Elision T_COMMA ;
558/.
559case $rule_number: {
560 sym(1).Node = QScript::makeAstNode<QScript::AST::Elision> (driver->nodePool(), sym(1).Elision);
561 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
562} break;
563./
564
565ElisionOpt: ;
566/.
567case $rule_number: {
568 sym(1).Node = 0;
569} break;
570./
571
572ElisionOpt: Elision ;
573/.
574case $rule_number: {
575 sym(1).Elision = sym(1).Elision->finish ();
576 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
577} break;
578./
579
580PropertyNameAndValueList: PropertyName T_COLON AssignmentExpression ;
581/.
582case $rule_number: {
583 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyName, sym(3).Expression);
584 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
585} break;
586./
587
588PropertyNameAndValueList: PropertyNameAndValueList T_COMMA PropertyName T_COLON AssignmentExpression ;
589/.
590case $rule_number: {
591 sym(1).Node = QScript::makeAstNode<QScript::AST::PropertyNameAndValueList> (driver->nodePool(), sym(1).PropertyNameAndValueList, sym(3).PropertyName, sym(5).Expression);
592 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
593} break;
594./
595
596PropertyName: T_IDENTIFIER ;
597/.
598case $rule_number: {
599 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
600 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
601} break;
602./
603
604PropertyName: T_STRING_LITERAL ;
605/.
606case $rule_number: {
607 sym(1).Node = QScript::makeAstNode<QScript::AST::StringLiteralPropertyName> (driver->nodePool(), sym(1).sval);
608 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
609} break;
610./
611
612PropertyName: T_NUMERIC_LITERAL ;
613/.
614case $rule_number: {
615 sym(1).Node = QScript::makeAstNode<QScript::AST::NumericLiteralPropertyName> (driver->nodePool(), sym(1).dval);
616 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
617} break;
618./
619
620PropertyName: ReservedIdentifier ;
621/.
622case $rule_number: {
623 sym(1).Node = QScript::makeAstNode<QScript::AST::IdentifierPropertyName> (driver->nodePool(), sym(1).sval);
624 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
625} break;
626./
627
628ReservedIdentifier: T_BREAK ;
629/.
630case $rule_number:
631./
632ReservedIdentifier: T_CASE ;
633/.
634case $rule_number:
635./
636ReservedIdentifier: T_CATCH ;
637/.
638case $rule_number:
639./
640ReservedIdentifier: T_CONTINUE ;
641/.
642case $rule_number:
643./
644ReservedIdentifier: T_DEFAULT ;
645/.
646case $rule_number:
647./
648ReservedIdentifier: T_DELETE ;
649/.
650case $rule_number:
651./
652ReservedIdentifier: T_DO ;
653/.
654case $rule_number:
655./
656ReservedIdentifier: T_ELSE ;
657/.
658case $rule_number:
659./
660ReservedIdentifier: T_FALSE ;
661/.
662case $rule_number:
663./
664ReservedIdentifier: T_FINALLY ;
665/.
666case $rule_number:
667./
668ReservedIdentifier: T_FOR ;
669/.
670case $rule_number:
671./
672ReservedIdentifier: T_FUNCTION ;
673/.
674case $rule_number:
675./
676ReservedIdentifier: T_IF ;
677/.
678case $rule_number:
679./
680ReservedIdentifier: T_IN ;
681/.
682case $rule_number:
683./
684ReservedIdentifier: T_INSTANCEOF ;
685/.
686case $rule_number:
687./
688ReservedIdentifier: T_NEW ;
689/.
690case $rule_number:
691./
692ReservedIdentifier: T_NULL ;
693/.
694case $rule_number:
695./
696ReservedIdentifier: T_RETURN ;
697/.
698case $rule_number:
699./
700ReservedIdentifier: T_SWITCH ;
701/.
702case $rule_number:
703./
704ReservedIdentifier: T_THIS ;
705/.
706case $rule_number:
707./
708ReservedIdentifier: T_THROW ;
709/.
710case $rule_number:
711./
712ReservedIdentifier: T_TRUE ;
713/.
714case $rule_number:
715./
716ReservedIdentifier: T_TRY ;
717/.
718case $rule_number:
719./
720ReservedIdentifier: T_TYPEOF ;
721/.
722case $rule_number:
723./
724ReservedIdentifier: T_VAR ;
725/.
726case $rule_number:
727./
728ReservedIdentifier: T_VOID ;
729/.
730case $rule_number:
731./
732ReservedIdentifier: T_WHILE ;
733/.
734case $rule_number:
735./
736ReservedIdentifier: T_CONST ;
737/.
738case $rule_number:
739./
740ReservedIdentifier: T_DEBUGGER ;
741/.
742case $rule_number:
743./
744ReservedIdentifier: T_RESERVED_WORD ;
745/.
746case $rule_number:
747./
748ReservedIdentifier: T_WITH ;
749/.
750case $rule_number:
751{
752 sym(1).sval = driver->intern(lexer->characterBuffer(), lexer->characterCount());
753} break;
754./
755
756PropertyIdentifier: T_IDENTIFIER ;
757PropertyIdentifier: ReservedIdentifier ;
758
759MemberExpression: PrimaryExpression ;
760MemberExpression: FunctionExpression ;
761
762MemberExpression: MemberExpression T_LBRACKET Expression T_RBRACKET ;
763/.
764case $rule_number: {
765 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
766 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
767} break;
768./
769
770MemberExpression: MemberExpression T_DOT PropertyIdentifier ;
771/.
772case $rule_number: {
773 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
774 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
775} break;
776./
777
778MemberExpression: T_NEW MemberExpression Arguments ;
779/.
780case $rule_number: {
781 sym(1).Node = QScript::makeAstNode<QScript::AST::NewMemberExpression> (driver->nodePool(), sym(2).Expression, sym(3).ArgumentList);
782 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
783} break;
784./
785
786NewExpression: MemberExpression ;
787
788NewExpression: T_NEW NewExpression ;
789/.
790case $rule_number: {
791 sym(1).Node = QScript::makeAstNode<QScript::AST::NewExpression> (driver->nodePool(), sym(2).Expression);
792 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
793} break;
794./
795
796CallExpression: MemberExpression Arguments ;
797/.
798case $rule_number: {
799 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
800 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
801} break;
802./
803
804CallExpression: CallExpression Arguments ;
805/.
806case $rule_number: {
807 sym(1).Node = QScript::makeAstNode<QScript::AST::CallExpression> (driver->nodePool(), sym(1).Expression, sym(2).ArgumentList);
808 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
809} break;
810./
811
812CallExpression: CallExpression T_LBRACKET Expression T_RBRACKET ;
813/.
814case $rule_number: {
815 sym(1).Node = QScript::makeAstNode<QScript::AST::ArrayMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
816 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
817} break;
818./
819
820CallExpression: CallExpression T_DOT PropertyIdentifier ;
821/.
822case $rule_number: {
823 sym(1).Node = QScript::makeAstNode<QScript::AST::FieldMemberExpression> (driver->nodePool(), sym(1).Expression, sym(3).sval);
824 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
825} break;
826./
827
828Arguments: T_LPAREN T_RPAREN ;
829/.
830case $rule_number: {
831 sym(1).Node = 0;
832} break;
833./
834
835Arguments: T_LPAREN ArgumentList T_RPAREN ;
836/.
837case $rule_number: {
838 sym(1).Node = sym(2).ArgumentList->finish ();
839 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
840} break;
841./
842
843ArgumentList: AssignmentExpression ;
844/.
845case $rule_number: {
846 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).Expression);
847 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
848} break;
849./
850
851ArgumentList: ArgumentList T_COMMA AssignmentExpression ;
852/.
853case $rule_number: {
854 sym(1).Node = QScript::makeAstNode<QScript::AST::ArgumentList> (driver->nodePool(), sym(1).ArgumentList, sym(3).Expression);
855 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
856} break;
857./
858
859LeftHandSideExpression: NewExpression ;
860LeftHandSideExpression: CallExpression ;
861PostfixExpression: LeftHandSideExpression ;
862
863PostfixExpression: LeftHandSideExpression T_PLUS_PLUS ;
864/.
865case $rule_number: {
866 sym(1).Node = QScript::makeAstNode<QScript::AST::PostIncrementExpression> (driver->nodePool(), sym(1).Expression);
867 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
868} break;
869./
870
871PostfixExpression: LeftHandSideExpression T_MINUS_MINUS ;
872/.
873case $rule_number: {
874 sym(1).Node = QScript::makeAstNode<QScript::AST::PostDecrementExpression> (driver->nodePool(), sym(1).Expression);
875 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
876} break;
877./
878
879UnaryExpression: PostfixExpression ;
880
881UnaryExpression: T_DELETE UnaryExpression ;
882/.
883case $rule_number: {
884 sym(1).Node = QScript::makeAstNode<QScript::AST::DeleteExpression> (driver->nodePool(), sym(2).Expression);
885 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
886} break;
887./
888
889UnaryExpression: T_VOID UnaryExpression ;
890/.
891case $rule_number: {
892 sym(1).Node = QScript::makeAstNode<QScript::AST::VoidExpression> (driver->nodePool(), sym(2).Expression);
893 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
894} break;
895./
896
897UnaryExpression: T_TYPEOF UnaryExpression ;
898/.
899case $rule_number: {
900 sym(1).Node = QScript::makeAstNode<QScript::AST::TypeOfExpression> (driver->nodePool(), sym(2).Expression);
901 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
902} break;
903./
904
905UnaryExpression: T_PLUS_PLUS UnaryExpression ;
906/.
907case $rule_number: {
908 sym(1).Node = QScript::makeAstNode<QScript::AST::PreIncrementExpression> (driver->nodePool(), sym(2).Expression);
909 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
910} break;
911./
912
913UnaryExpression: T_MINUS_MINUS UnaryExpression ;
914/.
915case $rule_number: {
916 sym(1).Node = QScript::makeAstNode<QScript::AST::PreDecrementExpression> (driver->nodePool(), sym(2).Expression);
917 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
918} break;
919./
920
921UnaryExpression: T_PLUS UnaryExpression ;
922/.
923case $rule_number: {
924 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryPlusExpression> (driver->nodePool(), sym(2).Expression);
925 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
926} break;
927./
928
929UnaryExpression: T_MINUS UnaryExpression ;
930/.
931case $rule_number: {
932 sym(1).Node = QScript::makeAstNode<QScript::AST::UnaryMinusExpression> (driver->nodePool(), sym(2).Expression);
933 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
934} break;
935./
936
937UnaryExpression: T_TILDE UnaryExpression ;
938/.
939case $rule_number: {
940 sym(1).Node = QScript::makeAstNode<QScript::AST::TildeExpression> (driver->nodePool(), sym(2).Expression);
941 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
942} break;
943./
944
945UnaryExpression: T_NOT UnaryExpression ;
946/.
947case $rule_number: {
948 sym(1).Node = QScript::makeAstNode<QScript::AST::NotExpression> (driver->nodePool(), sym(2).Expression);
949 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
950} break;
951./
952
953MultiplicativeExpression: UnaryExpression ;
954
955MultiplicativeExpression: MultiplicativeExpression T_STAR UnaryExpression ;
956/.
957case $rule_number: {
958 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mul, sym(3).Expression);
959 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
960} break;
961./
962
963MultiplicativeExpression: MultiplicativeExpression T_DIVIDE_ UnaryExpression ;
964/.
965case $rule_number: {
966 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Div, sym(3).Expression);
967 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
968} break;
969./
970
971MultiplicativeExpression: MultiplicativeExpression T_REMAINDER UnaryExpression ;
972/.
973case $rule_number: {
974 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Mod, sym(3).Expression);
975 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
976} break;
977./
978
979AdditiveExpression: MultiplicativeExpression ;
980
981AdditiveExpression: AdditiveExpression T_PLUS MultiplicativeExpression ;
982/.
983case $rule_number: {
984 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Add, sym(3).Expression);
985 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
986} break;
987./
988
989AdditiveExpression: AdditiveExpression T_MINUS MultiplicativeExpression ;
990/.
991case $rule_number: {
992 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Sub, sym(3).Expression);
993 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
994} break;
995./
996
997ShiftExpression: AdditiveExpression ;
998
999ShiftExpression: ShiftExpression T_LT_LT AdditiveExpression ;
1000/.
1001case $rule_number: {
1002 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::LShift, sym(3).Expression);
1003 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1004} break;
1005./
1006
1007ShiftExpression: ShiftExpression T_GT_GT AdditiveExpression ;
1008/.
1009case $rule_number: {
1010 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::RShift, sym(3).Expression);
1011 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1012} break;
1013./
1014
1015ShiftExpression: ShiftExpression T_GT_GT_GT AdditiveExpression ;
1016/.
1017case $rule_number: {
1018 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::URShift, sym(3).Expression);
1019 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1020} break;
1021./
1022
1023RelationalExpression: ShiftExpression ;
1024
1025RelationalExpression: RelationalExpression T_LT ShiftExpression ;
1026/.
1027case $rule_number: {
1028 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1029 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1030} break;
1031./
1032
1033RelationalExpression: RelationalExpression T_GT ShiftExpression ;
1034/.
1035case $rule_number: {
1036 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1037 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1038} break;
1039./
1040
1041RelationalExpression: RelationalExpression T_LE ShiftExpression ;
1042/.
1043case $rule_number: {
1044 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1045 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1046} break;
1047./
1048
1049RelationalExpression: RelationalExpression T_GE ShiftExpression ;
1050/.
1051case $rule_number: {
1052 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1053 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1054} break;
1055./
1056
1057RelationalExpression: RelationalExpression T_INSTANCEOF ShiftExpression ;
1058/.
1059case $rule_number: {
1060 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1061 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1062} break;
1063./
1064
1065RelationalExpression: RelationalExpression T_IN ShiftExpression ;
1066/.
1067case $rule_number: {
1068 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::In, sym(3).Expression);
1069 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1070} break;
1071./
1072
1073RelationalExpressionNotIn: ShiftExpression ;
1074
1075RelationalExpressionNotIn: RelationalExpressionNotIn T_LT ShiftExpression ;
1076/.
1077case $rule_number: {
1078 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Lt, sym(3).Expression);
1079 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1080} break;
1081./
1082
1083RelationalExpressionNotIn: RelationalExpressionNotIn T_GT ShiftExpression ;
1084/.
1085case $rule_number: {
1086 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Gt, sym(3).Expression);
1087 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1088} break;
1089./
1090
1091RelationalExpressionNotIn: RelationalExpressionNotIn T_LE ShiftExpression ;
1092/.
1093case $rule_number: {
1094 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Le, sym(3).Expression);
1095 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1096} break;
1097./
1098
1099RelationalExpressionNotIn: RelationalExpressionNotIn T_GE ShiftExpression ;
1100/.
1101case $rule_number: {
1102 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Ge, sym(3).Expression);
1103 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1104} break;
1105./
1106
1107RelationalExpressionNotIn: RelationalExpressionNotIn T_INSTANCEOF ShiftExpression ;
1108/.
1109case $rule_number: {
1110 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::InstanceOf, sym(3).Expression);
1111 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1112} break;
1113./
1114
1115EqualityExpression: RelationalExpression ;
1116
1117EqualityExpression: EqualityExpression T_EQ_EQ RelationalExpression ;
1118/.
1119case $rule_number: {
1120 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1121 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1122} break;
1123./
1124
1125EqualityExpression: EqualityExpression T_NOT_EQ RelationalExpression ;
1126/.
1127case $rule_number: {
1128 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1129 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1130} break;
1131./
1132
1133EqualityExpression: EqualityExpression T_EQ_EQ_EQ RelationalExpression ;
1134/.
1135case $rule_number: {
1136 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1137 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1138} break;
1139./
1140
1141EqualityExpression: EqualityExpression T_NOT_EQ_EQ RelationalExpression ;
1142/.
1143case $rule_number: {
1144 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1145 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1146} break;
1147./
1148
1149EqualityExpressionNotIn: RelationalExpressionNotIn ;
1150
1151EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ RelationalExpressionNotIn ;
1152/.
1153case $rule_number: {
1154 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Equal, sym(3).Expression);
1155 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1156} break;
1157./
1158
1159EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ RelationalExpressionNotIn;
1160/.
1161case $rule_number: {
1162 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::NotEqual, sym(3).Expression);
1163 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1164} break;
1165./
1166
1167EqualityExpressionNotIn: EqualityExpressionNotIn T_EQ_EQ_EQ RelationalExpressionNotIn ;
1168/.
1169case $rule_number: {
1170 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictEqual, sym(3).Expression);
1171 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1172} break;
1173./
1174
1175EqualityExpressionNotIn: EqualityExpressionNotIn T_NOT_EQ_EQ RelationalExpressionNotIn ;
1176/.
1177case $rule_number: {
1178 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::StrictNotEqual, sym(3).Expression);
1179 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1180} break;
1181./
1182
1183BitwiseANDExpression: EqualityExpression ;
1184
1185BitwiseANDExpression: BitwiseANDExpression T_AND EqualityExpression ;
1186/.
1187case $rule_number: {
1188 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1189 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1190} break;
1191./
1192
1193BitwiseANDExpressionNotIn: EqualityExpressionNotIn ;
1194
1195BitwiseANDExpressionNotIn: BitwiseANDExpressionNotIn T_AND EqualityExpressionNotIn ;
1196/.
1197case $rule_number: {
1198 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitAnd, sym(3).Expression);
1199 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1200} break;
1201./
1202
1203BitwiseXORExpression: BitwiseANDExpression ;
1204
1205BitwiseXORExpression: BitwiseXORExpression T_XOR BitwiseANDExpression ;
1206/.
1207case $rule_number: {
1208 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1209 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1210} break;
1211./
1212
1213BitwiseXORExpressionNotIn: BitwiseANDExpressionNotIn ;
1214
1215BitwiseXORExpressionNotIn: BitwiseXORExpressionNotIn T_XOR BitwiseANDExpressionNotIn ;
1216/.
1217case $rule_number: {
1218 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitXor, sym(3).Expression);
1219 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1220} break;
1221./
1222
1223BitwiseORExpression: BitwiseXORExpression ;
1224
1225BitwiseORExpression: BitwiseORExpression T_OR BitwiseXORExpression ;
1226/.
1227case $rule_number: {
1228 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1229 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1230} break;
1231./
1232
1233BitwiseORExpressionNotIn: BitwiseXORExpressionNotIn ;
1234
1235BitwiseORExpressionNotIn: BitwiseORExpressionNotIn T_OR BitwiseXORExpressionNotIn ;
1236/.
1237case $rule_number: {
1238 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::BitOr, sym(3).Expression);
1239 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1240} break;
1241./
1242
1243LogicalANDExpression: BitwiseORExpression ;
1244
1245LogicalANDExpression: LogicalANDExpression T_AND_AND BitwiseORExpression ;
1246/.
1247case $rule_number: {
1248 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1249 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1250} break;
1251./
1252
1253LogicalANDExpressionNotIn: BitwiseORExpressionNotIn ;
1254
1255LogicalANDExpressionNotIn: LogicalANDExpressionNotIn T_AND_AND BitwiseORExpressionNotIn ;
1256/.
1257case $rule_number: {
1258 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::And, sym(3).Expression);
1259 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1260} break;
1261./
1262
1263LogicalORExpression: LogicalANDExpression ;
1264
1265LogicalORExpression: LogicalORExpression T_OR_OR LogicalANDExpression ;
1266/.
1267case $rule_number: {
1268 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1269 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1270} break;
1271./
1272
1273LogicalORExpressionNotIn: LogicalANDExpressionNotIn ;
1274
1275LogicalORExpressionNotIn: LogicalORExpressionNotIn T_OR_OR LogicalANDExpressionNotIn ;
1276/.
1277case $rule_number: {
1278 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, QSOperator::Or, sym(3).Expression);
1279 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1280} break;
1281./
1282
1283ConditionalExpression: LogicalORExpression ;
1284
1285ConditionalExpression: LogicalORExpression T_QUESTION AssignmentExpression T_COLON AssignmentExpression ;
1286/.
1287case $rule_number: {
1288 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1289 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1290} break;
1291./
1292
1293ConditionalExpressionNotIn: LogicalORExpressionNotIn ;
1294
1295ConditionalExpressionNotIn: LogicalORExpressionNotIn T_QUESTION AssignmentExpressionNotIn T_COLON AssignmentExpressionNotIn ;
1296/.
1297case $rule_number: {
1298 sym(1).Node = QScript::makeAstNode<QScript::AST::ConditionalExpression> (driver->nodePool(), sym(1).Expression, sym(3).Expression, sym(5).Expression);
1299 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1300} break;
1301./
1302
1303AssignmentExpression: ConditionalExpression ;
1304
1305AssignmentExpression: LeftHandSideExpression AssignmentOperator AssignmentExpression ;
1306/.
1307case $rule_number: {
1308 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1309 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1310} break;
1311./
1312
1313AssignmentExpressionNotIn: ConditionalExpressionNotIn ;
1314
1315AssignmentExpressionNotIn: LeftHandSideExpression AssignmentOperator AssignmentExpressionNotIn ;
1316/.
1317case $rule_number: {
1318 sym(1).Node = QScript::makeAstNode<QScript::AST::BinaryExpression> (driver->nodePool(), sym(1).Expression, sym(2).ival, sym(3).Expression);
1319 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1320} break;
1321./
1322
1323AssignmentOperator: T_EQ ;
1324/.
1325case $rule_number: {
1326 sym(1).ival = QSOperator::Assign;
1327} break;
1328./
1329
1330AssignmentOperator: T_STAR_EQ ;
1331/.
1332case $rule_number: {
1333 sym(1).ival = QSOperator::InplaceMul;
1334} break;
1335./
1336
1337AssignmentOperator: T_DIVIDE_EQ ;
1338/.
1339case $rule_number: {
1340 sym(1).ival = QSOperator::InplaceDiv;
1341} break;
1342./
1343
1344AssignmentOperator: T_REMAINDER_EQ ;
1345/.
1346case $rule_number: {
1347 sym(1).ival = QSOperator::InplaceMod;
1348} break;
1349./
1350
1351AssignmentOperator: T_PLUS_EQ ;
1352/.
1353case $rule_number: {
1354 sym(1).ival = QSOperator::InplaceAdd;
1355} break;
1356./
1357
1358AssignmentOperator: T_MINUS_EQ ;
1359/.
1360case $rule_number: {
1361 sym(1).ival = QSOperator::InplaceSub;
1362} break;
1363./
1364
1365AssignmentOperator: T_LT_LT_EQ ;
1366/.
1367case $rule_number: {
1368 sym(1).ival = QSOperator::InplaceLeftShift;
1369} break;
1370./
1371
1372AssignmentOperator: T_GT_GT_EQ ;
1373/.
1374case $rule_number: {
1375 sym(1).ival = QSOperator::InplaceRightShift;
1376} break;
1377./
1378
1379AssignmentOperator: T_GT_GT_GT_EQ ;
1380/.
1381case $rule_number: {
1382 sym(1).ival = QSOperator::InplaceURightShift;
1383} break;
1384./
1385
1386AssignmentOperator: T_AND_EQ ;
1387/.
1388case $rule_number: {
1389 sym(1).ival = QSOperator::InplaceAnd;
1390} break;
1391./
1392
1393AssignmentOperator: T_XOR_EQ ;
1394/.
1395case $rule_number: {
1396 sym(1).ival = QSOperator::InplaceXor;
1397} break;
1398./
1399
1400AssignmentOperator: T_OR_EQ ;
1401/.
1402case $rule_number: {
1403 sym(1).ival = QSOperator::InplaceOr;
1404} break;
1405./
1406
1407Expression: AssignmentExpression ;
1408
1409Expression: Expression T_COMMA AssignmentExpression ;
1410/.
1411case $rule_number: {
1412 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1413 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1414} break;
1415./
1416
1417ExpressionOpt: ;
1418/.
1419case $rule_number: {
1420 sym(1).Node = 0;
1421} break;
1422./
1423
1424ExpressionOpt: Expression ;
1425
1426ExpressionNotIn: AssignmentExpressionNotIn ;
1427
1428ExpressionNotIn: ExpressionNotIn T_COMMA AssignmentExpressionNotIn ;
1429/.
1430case $rule_number: {
1431 sym(1).Node = QScript::makeAstNode<QScript::AST::Expression> (driver->nodePool(), sym(1).Expression, sym(3).Expression);
1432 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1433} break;
1434./
1435
1436ExpressionNotInOpt: ;
1437/.
1438case $rule_number: {
1439 sym(1).Node = 0;
1440} break;
1441./
1442
1443ExpressionNotInOpt: ExpressionNotIn ;
1444
1445Statement: Block ;
1446Statement: VariableStatement ;
1447Statement: EmptyStatement ;
1448Statement: ExpressionStatement ;
1449Statement: IfStatement ;
1450Statement: IterationStatement ;
1451Statement: ContinueStatement ;
1452Statement: BreakStatement ;
1453Statement: ReturnStatement ;
1454Statement: WithStatement ;
1455Statement: LabelledStatement ;
1456Statement: SwitchStatement ;
1457Statement: ThrowStatement ;
1458Statement: TryStatement ;
1459Statement: DebuggerStatement ;
1460
1461
1462Block: T_LBRACE StatementListOpt T_RBRACE ;
1463/.
1464case $rule_number: {
1465 sym(1).Node = QScript::makeAstNode<QScript::AST::Block> (driver->nodePool(), sym(2).StatementList);
1466 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1467} break;
1468./
1469
1470StatementList: Statement ;
1471/.
1472case $rule_number: {
1473 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).Statement);
1474 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1475} break;
1476./
1477
1478StatementList: StatementList Statement ;
1479/.
1480case $rule_number: {
1481 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementList> (driver->nodePool(), sym(1).StatementList, sym(2).Statement);
1482 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1483} break;
1484./
1485
1486StatementListOpt: ;
1487/.
1488case $rule_number: {
1489 sym(1).Node = 0;
1490} break;
1491./
1492
1493StatementListOpt: StatementList ;
1494/.
1495case $rule_number: {
1496 sym(1).Node = sym(1).StatementList->finish ();
1497} break;
1498./
1499
1500VariableStatement: VariableDeclarationKind VariableDeclarationList T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1501VariableStatement: VariableDeclarationKind VariableDeclarationList T_SEMICOLON ;
1502/.
1503case $rule_number: {
1504 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableStatement> (driver->nodePool(), sym(2).VariableDeclarationList->finish (/*readOnly=*/sym(1).ival == T_CONST));
1505 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1506} break;
1507./
1508
1509VariableDeclarationKind: T_CONST ;
1510/.
1511case $rule_number: {
1512 sym(1).ival = T_CONST;
1513} break;
1514./
1515
1516VariableDeclarationKind: T_VAR ;
1517/.
1518case $rule_number: {
1519 sym(1).ival = T_VAR;
1520} break;
1521./
1522
1523VariableDeclarationList: VariableDeclaration ;
1524/.
1525case $rule_number: {
1526 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1527 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1528} break;
1529./
1530
1531VariableDeclarationList: VariableDeclarationList T_COMMA VariableDeclaration ;
1532/.
1533case $rule_number: {
1534 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1535 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1536} break;
1537./
1538
1539VariableDeclarationListNotIn: VariableDeclarationNotIn ;
1540/.
1541case $rule_number: {
1542 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclaration);
1543 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1544} break;
1545./
1546
1547VariableDeclarationListNotIn: VariableDeclarationListNotIn T_COMMA VariableDeclarationNotIn ;
1548/.
1549case $rule_number: {
1550 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclarationList> (driver->nodePool(), sym(1).VariableDeclarationList, sym(3).VariableDeclaration);
1551 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1552} break;
1553./
1554
1555VariableDeclaration: T_IDENTIFIER InitialiserOpt ;
1556/.
1557case $rule_number: {
1558 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1559 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1560} break;
1561./
1562
1563VariableDeclarationNotIn: T_IDENTIFIER InitialiserNotInOpt ;
1564/.
1565case $rule_number: {
1566 sym(1).Node = QScript::makeAstNode<QScript::AST::VariableDeclaration> (driver->nodePool(), sym(1).sval, sym(2).Expression);
1567 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1568} break;
1569./
1570
1571Initialiser: T_EQ AssignmentExpression ;
1572/.
1573case $rule_number: {
1574 sym(1) = sym(2);
1575 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1576} break;
1577./
1578
1579InitialiserOpt: ;
1580/.
1581case $rule_number: {
1582 sym(1).Node = 0;
1583} break;
1584./
1585
1586InitialiserOpt: Initialiser ;
1587
1588InitialiserNotIn: T_EQ AssignmentExpressionNotIn ;
1589/.
1590case $rule_number: {
1591 sym(1) = sym(2);
1592 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1593} break;
1594./
1595
1596InitialiserNotInOpt: ;
1597/.
1598case $rule_number: {
1599 sym(1).Node = 0;
1600} break;
1601./
1602
1603InitialiserNotInOpt: InitialiserNotIn ;
1604
1605EmptyStatement: T_SEMICOLON ;
1606/.
1607case $rule_number: {
1608 sym(1).Node = QScript::makeAstNode<QScript::AST::EmptyStatement> (driver->nodePool());
1609 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1610} break;
1611./
1612
1613ExpressionStatement: Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1614ExpressionStatement: Expression T_SEMICOLON ;
1615/.
1616case $rule_number: {
1617 sym(1).Node = QScript::makeAstNode<QScript::AST::ExpressionStatement> (driver->nodePool(), sym(1).Expression);
1618 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1619} break;
1620./
1621
1622IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement T_ELSE Statement ;
1623/.
1624case $rule_number: {
1625 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement, sym(7).Statement);
1626 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1627} break;
1628./
1629
1630IfStatement: T_IF T_LPAREN Expression T_RPAREN Statement ;
1631/.
1632case $rule_number: {
1633 sym(1).Node = QScript::makeAstNode<QScript::AST::IfStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1634 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1635} break;
1636./
1637
1638
1639IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1640IterationStatement: T_DO Statement T_WHILE T_LPAREN Expression T_RPAREN T_SEMICOLON ;
1641/.
1642case $rule_number: {
1643 sym(1).Node = QScript::makeAstNode<QScript::AST::DoWhileStatement> (driver->nodePool(), sym(2).Statement, sym(5).Expression);
1644 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1645} break;
1646./
1647
1648IterationStatement: T_WHILE T_LPAREN Expression T_RPAREN Statement ;
1649/.
1650case $rule_number: {
1651 sym(1).Node = QScript::makeAstNode<QScript::AST::WhileStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1652 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1653} break;
1654./
1655
1656IterationStatement: T_FOR T_LPAREN ExpressionNotInOpt T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1657/.
1658case $rule_number: {
1659 sym(1).Node = QScript::makeAstNode<QScript::AST::ForStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Expression, sym(9).Statement);
1660 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(9));
1661} break;
1662./
1663
1664IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationListNotIn T_SEMICOLON ExpressionOpt T_SEMICOLON ExpressionOpt T_RPAREN Statement ;
1665/.
1666case $rule_number: {
1667 sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForStatement> (driver->nodePool(), sym(4).VariableDeclarationList->finish (/*readOnly=*/false), sym(6).Expression, sym(8).Expression, sym(10).Statement);
1668 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(10));
1669} break;
1670./
1671
1672IterationStatement: T_FOR T_LPAREN LeftHandSideExpression T_IN Expression T_RPAREN Statement ;
1673/.
1674case $rule_number: {
1675 sym(1).Node = QScript::makeAstNode<QScript::AST::ForEachStatement> (driver->nodePool(), sym(3).Expression, sym(5).Expression, sym(7).Statement);
1676 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(7));
1677} break;
1678./
1679
1680IterationStatement: T_FOR T_LPAREN T_VAR VariableDeclarationNotIn T_IN Expression T_RPAREN Statement ;
1681/.
1682case $rule_number: {
1683 sym(1).Node = QScript::makeAstNode<QScript::AST::LocalForEachStatement> (driver->nodePool(), sym(4).VariableDeclaration, sym(6).Expression, sym(8).Statement);
1684 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1685} break;
1686./
1687
1688ContinueStatement: T_CONTINUE T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1689ContinueStatement: T_CONTINUE T_SEMICOLON ;
1690/.
1691case $rule_number: {
1692 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool());
1693 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1694} break;
1695./
1696
1697ContinueStatement: T_CONTINUE T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1698ContinueStatement: T_CONTINUE T_IDENTIFIER T_SEMICOLON ;
1699/.
1700case $rule_number: {
1701 sym(1).Node = QScript::makeAstNode<QScript::AST::ContinueStatement> (driver->nodePool(), sym(2).sval);
1702 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1703} break;
1704./
1705
1706BreakStatement: T_BREAK T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1707BreakStatement: T_BREAK T_SEMICOLON ;
1708/.
1709case $rule_number: {
1710 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool());
1711 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1712} break;
1713./
1714
1715BreakStatement: T_BREAK T_IDENTIFIER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1716BreakStatement: T_BREAK T_IDENTIFIER T_SEMICOLON ;
1717/.
1718case $rule_number: {
1719 sym(1).Node = QScript::makeAstNode<QScript::AST::BreakStatement> (driver->nodePool(), sym(2).sval);
1720 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1721} break;
1722./
1723
1724ReturnStatement: T_RETURN ExpressionOpt T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1725ReturnStatement: T_RETURN ExpressionOpt T_SEMICOLON ;
1726/.
1727case $rule_number: {
1728 sym(1).Node = QScript::makeAstNode<QScript::AST::ReturnStatement> (driver->nodePool(), sym(2).Expression);
1729 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1730} break;
1731./
1732
1733WithStatement: T_WITH T_LPAREN Expression T_RPAREN Statement ;
1734/.
1735case $rule_number: {
1736 sym(1).Node = QScript::makeAstNode<QScript::AST::WithStatement> (driver->nodePool(), sym(3).Expression, sym(5).Statement);
1737 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1738} break;
1739./
1740
1741SwitchStatement: T_SWITCH T_LPAREN Expression T_RPAREN CaseBlock ;
1742/.
1743case $rule_number: {
1744 sym(1).Node = QScript::makeAstNode<QScript::AST::SwitchStatement> (driver->nodePool(), sym(3).Expression, sym(5).CaseBlock);
1745 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1746} break;
1747./
1748
1749CaseBlock: T_LBRACE CaseClausesOpt T_RBRACE ;
1750/.
1751case $rule_number: {
1752 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses);
1753 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1754} break;
1755./
1756
1757CaseBlock: T_LBRACE CaseClausesOpt DefaultClause CaseClausesOpt T_RBRACE ;
1758/.
1759case $rule_number: {
1760 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseBlock> (driver->nodePool(), sym(2).CaseClauses, sym(3).DefaultClause, sym(4).CaseClauses);
1761 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1762} break;
1763./
1764
1765CaseClauses: CaseClause ;
1766/.
1767case $rule_number: {
1768 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClause);
1769 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1770} break;
1771./
1772
1773CaseClauses: CaseClauses CaseClause ;
1774/.
1775case $rule_number: {
1776 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClauses> (driver->nodePool(), sym(1).CaseClauses, sym(2).CaseClause);
1777 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1778} break;
1779./
1780
1781CaseClausesOpt: ;
1782/.
1783case $rule_number: {
1784 sym(1).Node = 0;
1785} break;
1786./
1787
1788CaseClausesOpt: CaseClauses ;
1789/.
1790case $rule_number: {
1791 sym(1).Node = sym(1).CaseClauses->finish ();
1792 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1793} break;
1794./
1795
1796CaseClause: T_CASE Expression T_COLON StatementListOpt ;
1797/.
1798case $rule_number: {
1799 sym(1).Node = QScript::makeAstNode<QScript::AST::CaseClause> (driver->nodePool(), sym(2).Expression, sym(4).StatementList);
1800 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1801} break;
1802./
1803
1804DefaultClause: T_DEFAULT T_COLON StatementListOpt ;
1805/.
1806case $rule_number: {
1807 sym(1).Node = QScript::makeAstNode<QScript::AST::DefaultClause> (driver->nodePool(), sym(3).StatementList);
1808 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1809} break;
1810./
1811
1812LabelledStatement: T_IDENTIFIER T_COLON Statement ;
1813/.
1814case $rule_number: {
1815 sym(1).Node = QScript::makeAstNode<QScript::AST::LabelledStatement> (driver->nodePool(), sym(1).sval, sym(3).Statement);
1816 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1817} break;
1818./
1819
1820ThrowStatement: T_THROW Expression T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1821ThrowStatement: T_THROW Expression T_SEMICOLON ;
1822/.
1823case $rule_number: {
1824 sym(1).Node = QScript::makeAstNode<QScript::AST::ThrowStatement> (driver->nodePool(), sym(2).Expression);
1825 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1826} break;
1827./
1828
1829TryStatement: T_TRY Block Catch ;
1830/.
1831case $rule_number: {
1832 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch);
1833 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1834} break;
1835./
1836
1837TryStatement: T_TRY Block Finally ;
1838/.
1839case $rule_number: {
1840 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Finally);
1841 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1842} break;
1843./
1844
1845TryStatement: T_TRY Block Catch Finally ;
1846/.
1847case $rule_number: {
1848 sym(1).Node = QScript::makeAstNode<QScript::AST::TryStatement> (driver->nodePool(), sym(2).Statement, sym(3).Catch, sym(4).Finally);
1849 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(4));
1850} break;
1851./
1852
1853Catch: T_CATCH T_LPAREN T_IDENTIFIER T_RPAREN Block ;
1854/.
1855case $rule_number: {
1856 sym(1).Node = QScript::makeAstNode<QScript::AST::Catch> (driver->nodePool(), sym(3).sval, sym(5).Statement);
1857 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(5));
1858} break;
1859./
1860
1861Finally: T_FINALLY Block ;
1862/.
1863case $rule_number: {
1864 sym(1).Node = QScript::makeAstNode<QScript::AST::Finally> (driver->nodePool(), sym(2).Statement);
1865 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1866} break;
1867./
1868
1869DebuggerStatement: T_DEBUGGER T_AUTOMATIC_SEMICOLON ; -- automatic semicolon
1870DebuggerStatement: T_DEBUGGER T_SEMICOLON ;
1871/.
1872case $rule_number: {
1873 sym(1).Node = QScript::makeAstNode<QScript::AST::DebuggerStatement> (driver->nodePool());
1874 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1875} break;
1876./
1877
1878FunctionDeclaration: T_FUNCTION T_IDENTIFIER T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1879/.
1880case $rule_number: {
1881 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1882 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1883} break;
1884./
1885
1886FunctionExpression: T_FUNCTION IdentifierOpt T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ;
1887/.
1888case $rule_number: {
1889 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody);
1890 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(8));
1891} break;
1892./
1893
1894FormalParameterList: T_IDENTIFIER ;
1895/.
1896case $rule_number: {
1897 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).sval);
1898 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1899} break;
1900./
1901
1902FormalParameterList: FormalParameterList T_COMMA T_IDENTIFIER ;
1903/.
1904case $rule_number: {
1905 sym(1).Node = QScript::makeAstNode<QScript::AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval);
1906 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(3));
1907} break;
1908./
1909
1910FormalParameterListOpt: ;
1911/.
1912case $rule_number: {
1913 sym(1).Node = 0;
1914} break;
1915./
1916
1917FormalParameterListOpt: FormalParameterList ;
1918/.
1919case $rule_number: {
1920 sym(1).Node = sym(1).FormalParameterList->finish ();
1921 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1922} break;
1923./
1924
1925FunctionBodyOpt: ;
1926/.
1927case $rule_number: {
1928 sym(1).Node = 0;
1929} break;
1930./
1931
1932FunctionBodyOpt: FunctionBody ;
1933
1934FunctionBody: SourceElements ;
1935/.
1936case $rule_number: {
1937 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ());
1938 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1939} break;
1940./
1941
1942Program: SourceElements ;
1943/.
1944case $rule_number: {
1945 sym(1).Node = QScript::makeAstNode<QScript::AST::Program> (driver->nodePool(), sym(1).SourceElements->finish ());
1946 driver->changeAbstractSyntaxTree(sym(1).Node);
1947 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1948} break;
1949./
1950
1951SourceElements: SourceElement ;
1952/.
1953case $rule_number: {
1954 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElement);
1955 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1956} break;
1957./
1958
1959SourceElements: SourceElements SourceElement ;
1960/.
1961case $rule_number: {
1962 sym(1).Node = QScript::makeAstNode<QScript::AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement);
1963 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(2));
1964} break;
1965./
1966
1967SourceElement: Statement ;
1968/.
1969case $rule_number: {
1970 sym(1).Node = QScript::makeAstNode<QScript::AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement);
1971 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1972} break;
1973./
1974
1975SourceElement: FunctionDeclaration ;
1976/.
1977case $rule_number: {
1978 sym(1).Node = QScript::makeAstNode<QScript::AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration);
1979 Q_SCRIPT_UPDATE_POSITION(sym(1).Node, loc(1), loc(1));
1980} break;
1981./
1982
1983IdentifierOpt: ;
1984/.
1985case $rule_number: {
1986 sym(1).sval = 0;
1987} break;
1988./
1989
1990IdentifierOpt: T_IDENTIFIER ;
1991
1992PropertyNameAndValueListOpt: ;
1993/.
1994case $rule_number: {
1995 sym(1).Node = 0;
1996} break;
1997./
1998
1999PropertyNameAndValueListOpt: PropertyNameAndValueList ;
2000
2001/.
2002 } // switch
2003
2004 state_stack [tos] = nt_action (act, lhs [r] - TERMINAL_COUNT);
2005
2006 if (rhs[r] > 1) {
2007 location_stack[tos - 1].endLine = location_stack[tos + rhs[r] - 2].endLine;
2008 location_stack[tos - 1].endColumn = location_stack[tos + rhs[r] - 2].endColumn;
2009 location_stack[tos] = location_stack[tos + rhs[r] - 1];
2010 }
2011 }
2012
2013 else
2014 {
2015 if (saved_yytoken == -1 && automatic (driver, yytoken) && t_action (state, T_AUTOMATIC_SEMICOLON) > 0)
2016 {
2017 saved_yytoken = yytoken;
2018 yytoken = T_SEMICOLON;
2019 continue;
2020 }
2021
2022 else if ((state == INITIAL_STATE) && (yytoken == 0)) {
2023 // accept empty input
2024 yytoken = T_SEMICOLON;
2025 continue;
2026 }
2027
2028 int ers = state;
2029 int shifts = 0;
2030 int reduces = 0;
2031 int expected_tokens [3];
2032 for (int tk = 0; tk < TERMINAL_COUNT; ++tk)
2033 {
2034 int k = t_action (ers, tk);
2035
2036 if (! k)
2037 continue;
2038 else if (k < 0)
2039 ++reduces;
2040 else if (spell [tk])
2041 {
2042 if (shifts < 3)
2043 expected_tokens [shifts] = tk;
2044 ++shifts;
2045 }
2046 }
2047
2048 error_message.clear ();
2049 if (shifts && shifts < 3)
2050 {
2051 bool first = true;
2052
2053 for (int s = 0; s < shifts; ++s)
2054 {
2055 if (first)
2056 error_message += QLatin1String ("Expected ");
2057 else
2058 error_message += QLatin1String (", ");
2059
2060 first = false;
2061 error_message += QLatin1String("`");
2062 error_message += QLatin1String (spell [expected_tokens [s]]);
2063 error_message += QLatin1String("'");
2064 }
2065 }
2066
2067 if (error_message.isEmpty())
2068 error_message = lexer->errorMessage();
2069
2070 error_lineno = lexer->startLineNo();
2071 error_column = lexer->startColumnNo();
2072
2073 return false;
2074 }
2075 }
2076
2077 return false;
2078}
2079
2080QT_END_NAMESPACE
2081./
2082/:
2083QT_END_NAMESPACE
2084
2085#endif // QSCRIPTPARSER_P_H
2086:/
Note: See TracBrowser for help on using the repository browser.