1----------------------------------------------------------------------------
2--
3-- Copyright (C) 2015 The Qt Company Ltd.
4-- Contact: http://www.qt.io/licensing/
5--
6-- This file is part of the QtScript module of the Qt Toolkit.
7--
8-- $QT_BEGIN_LICENSE:LGPL-ONLY$
9-- GNU Lesser General Public License Usage
10-- This file may be used under the terms of the GNU Lesser
11-- General Public License version 2.1 as published by the Free Software
12-- Foundation and appearing in the file LICENSE.LGPL included in the
13-- packaging of this file.  Please review the following information to
14-- ensure the GNU Lesser General Public License version 2.1 requirements
15-- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16--
17-- If you have questions regarding the use of this file, please contact
18-- us via http://www.qt.io/contact-us/.
19--
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) 2015 The Qt Company Ltd.
66** Contact: http://www.qt.io/licensing/
67**
68** This file is part of the QtScript module of the Qt Toolkit.
69**
70** $QT_BEGIN_LICENSE:LGPL$
71** Commercial License Usage
72** Licensees holding valid commercial Qt licenses may use this file in
73** accordance with the commercial license agreement provided with the
74** Software or, alternatively, in accordance with the terms contained in
75** a written agreement between you and The Qt Company. For licensing terms
76** and conditions see http://www.qt.io/terms-conditions. For further
77** information use the contact form at http://www.qt.io/contact-us.
78**
79** GNU Lesser General Public License Usage
80** Alternatively, this file may be used under the terms of the GNU Lesser
81** General Public License version 2.1 or version 3 as published by the Free
82** Software Foundation and appearing in the file LICENSE.LGPLv21 and
83** LICENSE.LGPLv3 included in the packaging of this file. Please review the
84** following information to ensure the GNU Lesser General Public License
85** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
86** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
87**
88** As a special exception, The Qt Company gives you certain additional
89** rights. These rights are described in The Qt Company LGPL Exception
90** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
91**
92** GNU General Public License Usage
93** Alternatively, this file may be used under the terms of the GNU
94** General Public License version 3.0 as published by the Free Software
95** Foundation and appearing in the file LICENSE.GPL included in the
96** packaging of this file.  Please review the following information to
97** ensure the GNU General Public License version 3.0 requirements will be
98** met: http://www.gnu.org/copyleft/gpl.html.
99**
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) 2015 The Qt Company Ltd.
123** Contact: http://www.qt.io/licensing/
124**
125** This file is part of the QtScript module of the Qt Toolkit.
126**
127** $QT_BEGIN_LICENSE:LGPL$
128** Commercial License Usage
129** Licensees holding valid commercial Qt licenses may use this file in
130** accordance with the commercial license agreement provided with the
131** Software or, alternatively, in accordance with the terms contained in
132** a written agreement between you and The Qt Company. For licensing terms
133** and conditions see http://www.qt.io/terms-conditions. For further
134** information use the contact form at http://www.qt.io/contact-us.
135**
136** GNU Lesser General Public License Usage
137** Alternatively, this file may be used under the terms of the GNU Lesser
138** General Public License version 2.1 or version 3 as published by the Free
139** Software Foundation and appearing in the file LICENSE.LGPLv21 and
140** LICENSE.LGPLv3 included in the packaging of this file. Please review the
141** following information to ensure the GNU Lesser General Public License
142** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
143** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
144**
145** As a special exception, The Qt Company gives you certain additional
146** rights. These rights are described in The Qt Company LGPL Exception
147** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
148**
149** GNU General Public License Usage
150** Alternatively, this file may be used under the terms of the GNU
151** General Public License version 3.0 as published by the Free Software
152** Foundation and appearing in the file LICENSE.GPL included in the
153** packaging of this file.  Please review the following information to
154** ensure the GNU General Public License version 3.0 requirements will be
155** met: http://www.gnu.org/copyleft/gpl.html.
156**
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:/
2087