Skip to content
Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
2480 lines (2179 sloc) 66 KB
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.nesterovsky-bros.com/ecmascript6/2015-02-20"
targetNamespace="http://www.nesterovsky-bros.com/ecmascript6/2015-02-20"
elementFormDefault="qualified">
<xs:annotation>
<xs:documentation>
This xml schema is based on the ECMA-262 6th Edition (Draft February 20, 2015)
</xs:documentation>
<xs:documentation>
To better understand the schema please look at samples at "test" folder.
</xs:documentation>
</xs:annotation>
<xs:element name="meta" type="meta"/>
<xs:element name="comment" type="comment"/>
<xs:element name="script" type="script"/>
<xs:element name="module" type="module"/>
<xs:element name="function" type="function-declaration"/>
<xs:element name="class" type="class-declaration"/>
<xs:element name="let" type="lexical-declaration"/>
<xs:element name="const" type="lexical-declaration"/>
<xs:element name="var" type="variable-statement"/>
<xs:element name="block" type="block-statement"/>
<xs:element name="scope" type="block-statement">
<xs:annotation>
<xs:documentation>
A transparent scope used for logical grouping of statements.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="statement" type="statement"/>
<xs:element name="expression" type="expression-statement"/>
<xs:element name="if" type="if-statement"/>
<xs:element name="switch" type="switch-statement"/>
<xs:element name="do-while" type="do-while-statement"/>
<xs:element name="while" type="while-statement"/>
<xs:element name="for" type="for-statement"/>
<xs:element name="for-in" type="for-key-value-statement"/>
<xs:element name="for-of" type="for-key-value-statement"/>
<xs:element name="continue" type="continue-or-break-statement"/>
<xs:element name="break" type="continue-or-break-statement"/>
<xs:element name="return" type="return-statement"/>
<xs:element name="with" type="with-statement"/>
<xs:element name="label" type="labelled-statement"/>
<xs:element name="throw" type="throw-statement"/>
<xs:element name="try" type="try-statement"/>
<xs:element name="debugger" type="statement"/>
<xs:element name="null" type="expression"/>
<xs:element name="this" type="expression"/>
<xs:element name="super" type="expression"/>
<xs:element name="ref" type="ref"/>
<xs:element name="boolean" type="boolean"/>
<xs:element name="number" type="number"/>
<xs:element name="string" type="string"/>
<xs:element name="regex" type="regex"/>
<xs:element name="template" type="template"/>
<xs:element name="parens" type="parens"/>
<xs:element name="array" type="array"/>
<xs:element name="object" type="object"/>
<xs:element name="conditional" type="conditional"/>
<xs:element name="or" type="or"/>
<xs:element name="and" type="and"/>
<xs:element name="bitwise-or" type="bitwise-or"/>
<xs:element name="bitwise-xor" type="bitwise-xor"/>
<xs:element name="bitwise-and" type="bitwise-and"/>
<xs:element name="eq" type="equality-expression"/>
<xs:element name="ne" type="equality-expression"/>
<xs:element name="strict-eq" type="equality-expression"/>
<xs:element name="strict-ne" type="equality-expression"/>
<xs:element name="lt" type="relational-expression"/>
<xs:element name="gt" type="relational-expression"/>
<xs:element name="le" type="relational-expression"/>
<xs:element name="ge" type="relational-expression"/>
<xs:element name="instanceof" type="relational-expression"/>
<xs:element name="in" type="relational-expression"/>
<xs:element name="left-shift" type="shift-expression"/>
<xs:element name="right-shift" type="shift-expression"/>
<xs:element name="unsigned-right-shift" type="shift-expression"/>
<xs:element name="add" type="additive-expression"/>
<xs:element name="sub" type="additive-expression"/>
<xs:element name="mul" type="multiplicative-expression"/>
<xs:element name="div" type="multiplicative-expression"/>
<xs:element name="mod" type="multiplicative-expression"/>
<xs:element name="delete" type="unary-expression"/>
<xs:element name="void" type="unary-expression"/>
<xs:element name="typeof" type="unary-expression"/>
<xs:element name="inc" type="unary-expression"/>
<xs:element name="dec" type="unary-expression"/>
<xs:element name="plus" type="unary-expression"/>
<xs:element name="neg" type="unary-expression"/>
<xs:element name="inv" type="unary-expression"/>
<xs:element name="not" type="unary-expression"/>
<xs:element name="post-inc" type="postfix-expression"/>
<xs:element name="post-dec" type="postfix-expression"/>
<xs:element name="subscript" type="subscript"/>
<xs:element name="tag" type="tag"/>
<xs:element name="new-target" type="expression"/>
<xs:element name="new" type="call"/>
<xs:element name="call" type="call"/>
<xs:element name="yield" type="yield"/>
<xs:element name="arrow-function" type="arrow-function"/>
<xs:element name="assign" type="assignment-expression"/>
<xs:element name="mul-to" type="assignment-operator-expression"/>
<xs:element name="div-by" type="assignment-operator-expression"/>
<xs:element name="mod-by" type="assignment-operator-expression"/>
<xs:element name="add-to" type="assignment-operator-expression"/>
<xs:element name="sub-from" type="assignment-operator-expression"/>
<xs:element name="left-shift-by" type="assignment-operator-expression"/>
<xs:element name="right-shift-by" type="assignment-operator-expression"/>
<xs:element name="unsigned-right-shift-by"
type="assignment-operator-expression"/>
<xs:element name="and-with" type="assignment-operator-expression"/>
<xs:element name="xor-with" type="assignment-operator-expression"/>
<xs:element name="or-with" type="assignment-operator-expression"/>
<xs:simpleType name="identifier">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:attributeGroup name="export">
<xs:attribute name="export" use="optional" default="false">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
<xs:enumeration value="default"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:group name="name">
<xs:sequence>
<xs:element name="name" type="name"/>
</xs:sequence>
</xs:group>
<xs:group name="expression">
<xs:choice>
<xs:group ref="assignment-expression" minOccurs="1" maxOccurs="unbounded"/>
</xs:choice>
</xs:group>
<xs:group name="statement-base">
<xs:choice>
<xs:group ref="block-statement"/>
<xs:group ref="empty-statement"/>
<xs:group ref="if-statement"/>
<xs:group ref="breakable-statement"/>
<xs:group ref="continue-statement"/>
<xs:group ref="break-statement"/>
<xs:group ref="return-statement"/>
<xs:group ref="with-statement"/>
<xs:group ref="labelled-statement"/>
<xs:group ref="throw-statement"/>
<xs:group ref="try-statement"/>
<xs:group ref="debugger-statement"/>
</xs:choice>
</xs:group>
<xs:group name="statement">
<xs:choice>
<xs:group ref="statement-base"/>
<xs:group ref="variable-statement"/>
<xs:group ref="expression-statement"/>
</xs:choice>
</xs:group>
<xs:group name="module-statement">
<xs:choice>
<xs:group ref="statement-base"/>
<xs:group ref="module-variable-statement"/>
<xs:group ref="module-expression-statement"/>
</xs:choice>
</xs:group>
<xs:group name="program">
<xs:choice>
<xs:group ref="script"/>
<xs:group ref="module"/>
</xs:choice>
</xs:group>
<xs:group name="script">
<xs:sequence>
<xs:element ref="script"/>
</xs:sequence>
</xs:group>
<xs:group name="module">
<xs:sequence>
<xs:element ref="module"/>
</xs:sequence>
</xs:group>
<xs:group name="module-item">
<xs:choice>
<xs:group ref="import-declaration"/>
<xs:group ref="export-declaration"/>
<xs:group ref="module-statement"/>
<xs:group ref="module-declaration"/>
<xs:group ref="module-scope"/>
</xs:choice>
</xs:group>
<xs:group name="module-scope">
<xs:sequence>
<xs:element name="scope" type="module-scope">
<xs:annotation>
<xs:documentation>
A transparent scope used for logical grouping of module items.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="import-declaration">
<xs:sequence>
<xs:element name="import" type="import-declaration"/>
</xs:sequence>
</xs:group>
<xs:group name="export-declaration">
<xs:sequence>
<xs:element name="export" type="export-declaration"/>
</xs:sequence>
</xs:group>
<xs:group name="export-namespace-declaration">
<xs:sequence>
<xs:group ref="export-namespace"/>
<xs:group ref="from-clause"/>
</xs:sequence>
</xs:group>
<xs:group name="export-clause-declaration">
<xs:sequence>
<xs:group ref="member-specifier" minOccurs="1" maxOccurs="unbounded"/>
<xs:group ref="from-clause" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:group name="export-namespace">
<xs:sequence>
<xs:element name="namespace" type="base-element"/>
</xs:sequence>
</xs:group>
<xs:group name="import-default-binding">
<xs:sequence>
<xs:group ref="name"/>
</xs:sequence>
</xs:group>
<xs:group name="namespace-import">
<xs:sequence>
<xs:element name="namespace" type="namespace-import"/>
</xs:sequence>
</xs:group>
<xs:group name="member-specifier">
<xs:sequence>
<xs:element name="ref" type="member-specifier"/>
</xs:sequence>
</xs:group>
<xs:group name="from-clause">
<xs:sequence>
<xs:element name="from" type="from-clause"/>
</xs:sequence>
</xs:group>
<xs:group name="declaration">
<xs:choice>
<xs:group ref="hoistable-declaration"/>
<xs:group ref="class-declaration"/>
<xs:group ref="lexical-declaration"/>
</xs:choice>
</xs:group>
<xs:group name="module-declaration">
<xs:choice>
<xs:group ref="module-hoistable-declaration"/>
<xs:group ref="module-class-declaration"/>
<xs:group ref="module-lexical-declaration"/>
</xs:choice>
</xs:group>
<xs:group name="hoistable-declaration">
<xs:sequence>
<xs:group ref="function-declaration"/>
</xs:sequence>
</xs:group>
<xs:group name="module-hoistable-declaration">
<xs:sequence>
<xs:group ref="module-function-declaration"/>
</xs:sequence>
</xs:group>
<xs:group name="class-declaration">
<xs:sequence>
<xs:element ref="class"/>
</xs:sequence>
</xs:group>
<xs:group name="module-class-declaration">
<xs:sequence>
<xs:element name="class" type="module-class-declaration"/>
</xs:sequence>
</xs:group>
<xs:group name="lexical-declaration">
<xs:choice>
<xs:element ref="let"/>
<xs:element ref="const"/>
</xs:choice>
</xs:group>
<xs:group name="module-lexical-declaration">
<xs:choice>
<xs:element name="let" type="module-lexical-declaration"/>
<xs:element name="const" type="module-lexical-declaration"/>
</xs:choice>
</xs:group>
<xs:group name="lexical-declaration-content">
<xs:annotation>
<xs:documentation>
NOTE: in case of name production binding-initialize is optional;
otherwise it's requires.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:group ref="name-or-pattern"/>
<xs:group ref="binding-initialize" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:group name="breakable-statement">
<xs:choice>
<xs:group ref="iteration-statement"/>
<xs:group ref="switch-statement"/>
</xs:choice>
</xs:group>
<xs:group name="primary-expression">
<xs:choice>
<xs:group ref="this"/>
<xs:group ref="super"/>
<xs:group ref="identifier-reference"/>
<xs:group ref="literal"/>
<xs:group ref="array-literal"/>
<xs:group ref="object-literal"/>
<xs:group ref="function-expression"/>
<xs:group ref="class-expression"/>
<xs:group ref="regex-literal"/>
<xs:group ref="template-literal"/>
<xs:group ref="parens"/>
</xs:choice>
</xs:group>
<xs:group name="this">
<xs:sequence>
<xs:element ref="this"/>
</xs:sequence>
</xs:group>
<xs:group name="super">
<xs:sequence>
<xs:element ref="super"/>
</xs:sequence>
</xs:group>
<xs:group name="identifier-reference">
<xs:choice>
<xs:group ref="ref"/>
</xs:choice>
</xs:group>
<xs:group name="ref">
<xs:sequence>
<xs:element ref="ref"/>
</xs:sequence>
</xs:group>
<xs:group name="simple-ref">
<xs:sequence>
<xs:element name="ref" type="simple-ref"/>
</xs:sequence>
</xs:group>
<xs:group name="literal">
<xs:choice>
<xs:group ref="null-literal"/>
<xs:group ref="boolean-literal"/>
<xs:group ref="numeric-literal"/>
<xs:group ref="string-literal"/>
</xs:choice>
</xs:group>
<xs:group name="null-literal">
<xs:sequence>
<xs:element ref="null"/>
</xs:sequence>
</xs:group>
<xs:group name="boolean-literal">
<xs:sequence>
<xs:element ref="boolean"/>
</xs:sequence>
</xs:group>
<xs:group name="numeric-literal">
<xs:sequence>
<xs:element ref="number"/>
</xs:sequence>
</xs:group>
<xs:group name="string-literal">
<xs:sequence>
<xs:element ref="string"/>
</xs:sequence>
</xs:group>
<xs:group name="regex-literal">
<xs:sequence>
<xs:element ref="regex"/>
</xs:sequence>
</xs:group>
<xs:group name="template-literal">
<xs:sequence>
<xs:element ref="template"/>
</xs:sequence>
</xs:group>
<xs:group name="parens">
<xs:sequence>
<xs:element ref="parens"/>
</xs:sequence>
</xs:group>
<xs:group name="array-literal">
<xs:sequence>
<xs:element ref="array"/>
</xs:sequence>
</xs:group>
<xs:group name="array-element">
<xs:choice>
<xs:group ref="elision"/>
<xs:group ref="spread"/>
<xs:group ref="assignment-expression"/>
</xs:choice>
</xs:group>
<xs:group name="elision">
<xs:sequence>
<xs:element name="elision" type="expression"/>
</xs:sequence>
</xs:group>
<xs:group name="spread">
<xs:sequence>
<xs:element name="spread" type="spread"/>
</xs:sequence>
</xs:group>
<xs:group name="object-literal">
<xs:sequence>
<xs:element ref="object"/>
</xs:sequence>
</xs:group>
<xs:group name="function-expression">
<xs:sequence>
<xs:element name="function" type="function-expression"/>
</xs:sequence>
</xs:group>
<xs:group name="class-expression">
<xs:sequence>
<xs:element name="class" type="class-expression"/>
</xs:sequence>
</xs:group>
<xs:group name="object-member">
<xs:choice>
<xs:group ref="member-definition"/>
<xs:group ref="method-definition"/>
<xs:group ref="object-member-scope"/>
</xs:choice>
</xs:group>
<xs:group name="object-member-scope">
<xs:sequence>
<xs:element name="scope" type="object-member-scope">
<xs:annotation>
<xs:documentation>
A transparent scope used for logical grouping object members.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="property-name">
<xs:sequence>
<xs:element name="name" type="property-name"/>
</xs:sequence>
</xs:group>
<xs:group name="member-definition">
<xs:sequence>
<xs:element name="property" type="member-definition"/>
</xs:sequence>
</xs:group>
<xs:group name="method-definition">
<xs:sequence>
<xs:element name="function" type="method"/>
</xs:sequence>
</xs:group>
<xs:group name="class-method-definition">
<xs:sequence>
<xs:element name="function" type="class-method"/>
</xs:sequence>
</xs:group>
<xs:group name="assignment-expression">
<xs:choice>
<xs:group ref="conditional-expression"/>
<xs:group ref="yield"/>
<xs:group ref="arrow-function"/>
<xs:group ref="assign"/>
<xs:group ref="mul-to"/>
<xs:group ref="div-by"/>
<xs:group ref="mod-by"/>
<xs:group ref="add-to"/>
<xs:group ref="sub-from"/>
<xs:group ref="left-shift-by"/>
<xs:group ref="right-shift-by"/>
<xs:group ref="unsigned-rsh-by"/>
<xs:group ref="and-with"/>
<xs:group ref="xor-with"/>
<xs:group ref="or-with"/>
</xs:choice>
</xs:group>
<xs:group name="conditional-expression">
<xs:choice>
<xs:group ref="logical-or-expression"/>
<xs:group ref="conditional"/>
</xs:choice>
</xs:group>
<xs:group name="logical-or-expression">
<xs:choice>
<xs:group ref="logical-and-expression"/>
<xs:group ref="or"/>
</xs:choice>
</xs:group>
<xs:group name="logical-and-expression">
<xs:choice>
<xs:group ref="bitwise-or-expression"/>
<xs:group ref="and"/>
</xs:choice>
</xs:group>
<xs:group name="bitwise-or-expression">
<xs:choice>
<xs:group ref="bitwise-xor-expression"/>
<xs:group ref="bitwise-or"/>
</xs:choice>
</xs:group>
<xs:group name="bitwise-xor-expression">
<xs:choice>
<xs:group ref="bitwise-and-expression"/>
<xs:group ref="bitwise-xor"/>
</xs:choice>
</xs:group>
<xs:group name="bitwise-and-expression">
<xs:choice>
<xs:group ref="equality-expression"/>
<xs:group ref="bitwise-and"/>
</xs:choice>
</xs:group>
<xs:group name="equality-expression">
<xs:choice>
<xs:group ref="relational-expression"/>
<xs:group ref="eq"/>
<xs:group ref="ne"/>
<xs:group ref="strict-eq"/>
<xs:group ref="strict-ne"/>
</xs:choice>
</xs:group>
<xs:group name="relational-expression">
<xs:choice>
<xs:group ref="shift-expression"/>
<xs:group ref="lt"/>
<xs:group ref="gt"/>
<xs:group ref="le"/>
<xs:group ref="ge"/>
<xs:group ref="instanceof"/>
<xs:group ref="in"/>
</xs:choice>
</xs:group>
<xs:group name="shift-expression">
<xs:choice>
<xs:group ref="additive-expression"/>
<xs:group ref="left-shift"/>
<xs:group ref="right-shift"/>
<xs:group ref="unsigned-right-shift"/>
</xs:choice>
</xs:group>
<xs:group name="additive-expression">
<xs:choice>
<xs:group ref="multiplicative-expression"/>
<xs:group ref="add"/>
<xs:group ref="sub"/>
</xs:choice>
</xs:group>
<xs:group name="multiplicative-expression">
<xs:choice>
<xs:group ref="unary-expression"/>
<xs:group ref="mul"/>
<xs:group ref="div"/>
<xs:group ref="mod"/>
</xs:choice>
</xs:group>
<xs:group name="unary-expression">
<xs:choice>
<xs:group ref="postfix-expression"/>
<xs:group ref="delete"/>
<xs:group ref="void"/>
<xs:group ref="typeof"/>
<xs:group ref="inc"/>
<xs:group ref="dec"/>
<xs:group ref="plus"/>
<xs:group ref="neg"/>
<xs:group ref="inv"/>
<xs:group ref="not"/>
</xs:choice>
</xs:group>
<xs:group name="postfix-expression">
<xs:choice>
<xs:group ref="member-expression"/>
<xs:group ref="post-inc"/>
<xs:group ref="post-dec"/>
</xs:choice>
</xs:group>
<xs:group name="lefthand-side-expression">
<xs:annotation>
<xs:documentation>
Modified (simplified) compared with spec production.
</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:choice>
<xs:group ref="identifier-reference"/>
<xs:group ref="parens">
<xs:annotation>
<xs:documentation>
Expression in parens should belong to
lefthand-side-expression group.
</xs:documentation>
</xs:annotation>
</xs:group>
<xs:group ref="subscript"/>
</xs:choice>
</xs:choice>
</xs:group>
<xs:group name="new-expression">
<xs:annotation>
<xs:documentation>
Fused into member expression.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:group ref="member-expression"/>
</xs:sequence>
</xs:group>
<xs:group name="member-expression">
<xs:annotation>
<xs:documentation>
SuperProperty production is moved to PrimaryExpression as
a sibling of "this" production.
</xs:documentation>
<xs:documentation>
ref and member-ref productions are fused.
</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:group ref="primary-expression"/>
<xs:group ref="subscript"/>
<xs:group ref="tag"/>
<xs:group ref="meta-property"/>
<xs:group ref="new"/>
<xs:group ref="call"/>
</xs:choice>
</xs:group>
<xs:group name="meta-property">
<xs:choice>
<xs:group ref="new-target"/>
</xs:choice>
</xs:group>
<xs:group name="name-or-pattern">
<xs:choice>
<xs:group ref="name"/>
<xs:group ref="binding-pattern"/>
</xs:choice>
</xs:group>
<xs:group name="binding-pattern">
<xs:sequence>
<xs:element name="pattern" type="binding-pattern"/>
</xs:sequence>
</xs:group>
<xs:group name="binding-pattern-content">
<xs:choice>
<xs:group ref="object-binding-pattern"/>
<xs:group ref="array-binding-pattern"/>
</xs:choice>
</xs:group>
<xs:group name="object-binding-pattern">
<xs:sequence>
<xs:element name="object" type="object-binding-pattern"/>
</xs:sequence>
</xs:group>
<xs:group name="array-binding-pattern">
<xs:sequence>
<xs:element name="array" type="array-binding-pattern"/>
</xs:sequence>
</xs:group>
<xs:group name="binding-property">
<xs:sequence>
<xs:element name="property" type="binding-property"/>
</xs:sequence>
</xs:group>
<xs:group name="binding-elision">
<xs:sequence>
<xs:element name="elision" type="base-element"/>
</xs:sequence>
</xs:group>
<xs:group name="binding-element">
<xs:sequence>
<xs:element name="element" type="binding-element"/>
</xs:sequence>
</xs:group>
<xs:group name="binding-spread">
<xs:sequence>
<xs:element name="spread" type="binding-spread"/>
</xs:sequence>
</xs:group>
<xs:group name="binding-initialize">
<xs:sequence>
<xs:element name="initialize" type="binding-initialize"/>
</xs:sequence>
</xs:group>
<xs:group name="conditional">
<xs:sequence>
<xs:element ref="conditional"/>
</xs:sequence>
</xs:group>
<xs:group name="or">
<xs:sequence>
<xs:element ref="or"/>
</xs:sequence>
</xs:group>
<xs:group name="and">
<xs:sequence>
<xs:element ref="and"/>
</xs:sequence>
</xs:group>
<xs:group name="bitwise-or">
<xs:sequence>
<xs:element ref="bitwise-or"/>
</xs:sequence>
</xs:group>
<xs:group name="bitwise-xor">
<xs:sequence>
<xs:element ref="bitwise-xor"/>
</xs:sequence>
</xs:group>
<xs:group name="bitwise-and">
<xs:sequence>
<xs:element ref="bitwise-and"/>
</xs:sequence>
</xs:group>
<xs:group name="eq">
<xs:sequence>
<xs:element ref="eq"/>
</xs:sequence>
</xs:group>
<xs:group name="ne">
<xs:sequence>
<xs:element ref="ne"/>
</xs:sequence>
</xs:group>
<xs:group name="strict-eq">
<xs:sequence>
<xs:element ref="strict-eq"/>
</xs:sequence>
</xs:group>
<xs:group name="strict-ne">
<xs:sequence>
<xs:element ref="strict-ne"/>
</xs:sequence>
</xs:group>
<xs:group name="lt">
<xs:sequence>
<xs:element ref="lt"/>
</xs:sequence>
</xs:group>
<xs:group name="gt">
<xs:sequence>
<xs:element ref="gt"/>
</xs:sequence>
</xs:group>
<xs:group name="le">
<xs:sequence>
<xs:element ref="le"/>
</xs:sequence>
</xs:group>
<xs:group name="ge">
<xs:sequence>
<xs:element ref="ge"/>
</xs:sequence>
</xs:group>
<xs:group name="instanceof">
<xs:sequence>
<xs:element ref="instanceof"/>
</xs:sequence>
</xs:group>
<xs:group name="in">
<xs:sequence>
<xs:element ref="in"/>
</xs:sequence>
</xs:group>
<xs:group name="left-shift">
<xs:sequence>
<xs:element ref="left-shift"/>
</xs:sequence>
</xs:group>
<xs:group name="right-shift">
<xs:sequence>
<xs:element ref="right-shift"/>
</xs:sequence>
</xs:group>
<xs:group name="unsigned-right-shift">
<xs:sequence>
<xs:element ref="unsigned-right-shift"/>
</xs:sequence>
</xs:group>
<xs:group name="add">
<xs:sequence>
<xs:element ref="add"/>
</xs:sequence>
</xs:group>
<xs:group name="sub">
<xs:sequence>
<xs:element ref="sub"/>
</xs:sequence>
</xs:group>
<xs:group name="mul">
<xs:sequence>
<xs:element ref="mul"/>
</xs:sequence>
</xs:group>
<xs:group name="div">
<xs:sequence>
<xs:element ref="div"/>
</xs:sequence>
</xs:group>
<xs:group name="mod">
<xs:sequence>
<xs:element ref="mod"/>
</xs:sequence>
</xs:group>
<xs:group name="delete">
<xs:sequence>
<xs:element ref="delete"/>
</xs:sequence>
</xs:group>
<xs:group name="void">
<xs:sequence>
<xs:element ref="void"/>
</xs:sequence>
</xs:group>
<xs:group name="typeof">
<xs:sequence>
<xs:element ref="typeof"/>
</xs:sequence>
</xs:group>
<xs:group name="inc">
<xs:sequence>
<xs:element ref="inc"/>
</xs:sequence>
</xs:group>
<xs:group name="dec">
<xs:sequence>
<xs:element ref="dec"/>
</xs:sequence>
</xs:group>
<xs:group name="plus">
<xs:sequence>
<xs:element ref="plus"/>
</xs:sequence>
</xs:group>
<xs:group name="neg">
<xs:sequence>
<xs:element ref="neg"/>
</xs:sequence>
</xs:group>
<xs:group name="inv">
<xs:sequence>
<xs:element ref="inv"/>
</xs:sequence>
</xs:group>
<xs:group name="not">
<xs:sequence>
<xs:element ref="not"/>
</xs:sequence>
</xs:group>
<xs:group name="post-inc">
<xs:sequence>
<xs:element ref="post-inc"/>
</xs:sequence>
</xs:group>
<xs:group name="post-dec">
<xs:sequence>
<xs:element ref="post-dec"/>
</xs:sequence>
</xs:group>
<xs:group name="subscript">
<xs:sequence>
<xs:element ref="subscript"/>
</xs:sequence>
</xs:group>
<xs:group name="tag">
<xs:sequence>
<xs:element ref="tag"/>
</xs:sequence>
</xs:group>
<xs:group name="new-target">
<xs:sequence>
<xs:element ref="new-target"/>
</xs:sequence>
</xs:group>
<xs:group name="new">
<xs:sequence>
<xs:element ref="new"/>
</xs:sequence>
</xs:group>
<xs:group name="call">
<xs:sequence>
<xs:element ref="call"/>
</xs:sequence>
</xs:group>
<xs:group name="arguments">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="spread"/>
<xs:group ref="assignment-expression"/>
</xs:choice>
</xs:sequence>
</xs:group>
<xs:group name="yield">
<xs:sequence>
<xs:element ref="yield"/>
</xs:sequence>
</xs:group>
<xs:group name="arrow-function">
<xs:sequence>
<xs:element ref="arrow-function"/>
</xs:sequence>
</xs:group>
<xs:group name="arrow-expression-body">
<xs:sequence>
<xs:element name="expression" type="arrow-expression-body"/>
</xs:sequence>
</xs:group>
<xs:group name="assign">
<xs:sequence>
<xs:element ref="assign"/>
</xs:sequence>
</xs:group>
<xs:group name="mul-to">
<xs:sequence>
<xs:element ref="mul-to"/>
</xs:sequence>
</xs:group>
<xs:group name="div-by">
<xs:sequence>
<xs:element ref="div-by"/>
</xs:sequence>
</xs:group>
<xs:group name="mod-by">
<xs:sequence>
<xs:element ref="mod-by"/>
</xs:sequence>
</xs:group>
<xs:group name="add-to">
<xs:sequence>
<xs:element ref="add-to"/>
</xs:sequence>
</xs:group>
<xs:group name="sub-from">
<xs:sequence>
<xs:element ref="sub-from"/>
</xs:sequence>
</xs:group>
<xs:group name="left-shift-by">
<xs:sequence>
<xs:element ref="left-shift-by"/>
</xs:sequence>
</xs:group>
<xs:group name="right-shift-by">
<xs:sequence>
<xs:element ref="right-shift-by"/>
</xs:sequence>
</xs:group>
<xs:group name="unsigned-rsh-by">
<xs:sequence>
<xs:element ref="unsigned-right-shift-by"/>
</xs:sequence>
</xs:group>
<xs:group name="and-with">
<xs:sequence>
<xs:element ref="and-with"/>
</xs:sequence>
</xs:group>
<xs:group name="xor-with">
<xs:sequence>
<xs:element ref="xor-with"/>
</xs:sequence>
</xs:group>
<xs:group name="or-with">
<xs:sequence>
<xs:element ref="or-with"/>
</xs:sequence>
</xs:group>
<xs:group name="function-declaration">
<xs:sequence>
<xs:element ref="function"/>
</xs:sequence>
</xs:group>
<xs:group name="module-function-declaration">
<xs:sequence>
<xs:element name="function" type="module-function-declaration"/>
</xs:sequence>
</xs:group>
<xs:group name="function-declaration-content">
<xs:sequence>
<xs:group ref="name" minOccurs="0"/>
<xs:group ref="formal-parameters" minOccurs="0"/>
<xs:group ref="function-body" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:group name="formal-parameters">
<xs:sequence>
<xs:group ref="formal-parameter"
minOccurs="0" maxOccurs="unbounded"/>
<xs:group ref="formal-rest-parameter" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:group name="formal-parameter">
<xs:sequence>
<xs:element name="parameter" type="formal-parameter"/>
</xs:sequence>
</xs:group>
<xs:group name="formal-rest-parameter">
<xs:sequence>
<xs:element name="rest-parameter" type="formal-rest-parameter"/>
</xs:sequence>
</xs:group>
<xs:group name="function-body">
<xs:sequence>
<xs:element name="body" type="statement-container"/>
</xs:sequence>
</xs:group>
<xs:group name="class-declaration-content">
<xs:sequence>
<xs:group ref="name" minOccurs="0"/>
<xs:group ref="class-heritage" minOccurs="0"/>
<xs:group ref="class-body" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:group name="class-heritage">
<xs:sequence>
<xs:element name="extends" type="class-heritage"/>
</xs:sequence>
</xs:group>
<xs:group name="class-body">
<xs:choice>
<xs:group ref="class-method-definition"/>
<xs:group ref="class-body-scope"/>
</xs:choice>
</xs:group>
<xs:group name="class-body-scope">
<xs:sequence>
<xs:element name="scope" type="class-body-scope">
<xs:annotation>
<xs:documentation>
A transparent scope used for logical grouping of class members.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="scope">
<xs:sequence>
<xs:element ref="scope"/>
</xs:sequence>
</xs:group>
<xs:group name="block-statement">
<xs:sequence>
<xs:element ref="block"/>
</xs:sequence>
</xs:group>
<xs:group name="variable-statement">
<xs:sequence>
<xs:element ref="var"/>
</xs:sequence>
</xs:group>
<xs:group name="module-variable-statement">
<xs:sequence>
<xs:element name="var" type="module-variable-statement"/>
</xs:sequence>
</xs:group>
<xs:group name="empty-statement">
<xs:sequence>
<xs:element ref="statement"/>
</xs:sequence>
</xs:group>
<xs:group name="expression-statement">
<xs:sequence>
<xs:element ref="expression"/>
</xs:sequence>
</xs:group>
<xs:group name="module-expression-statement">
<xs:sequence>
<xs:element name="expression" type="module-expression-statement"/>
</xs:sequence>
</xs:group>
<xs:group name="if-statement">
<xs:sequence>
<xs:element ref="if"/>
</xs:sequence>
</xs:group>
<xs:group name="iteration-statement">
<xs:choice>
<xs:group ref="do-while-statement"/>
<xs:group ref="while-statement"/>
<xs:group ref="for-statement"/>
<xs:group ref="for-in-statement"/>
<xs:group ref="for-of-statement"/>
</xs:choice>
</xs:group>
<xs:group name="do-while-statement">
<xs:sequence>
<xs:element ref="do-while"/>
</xs:sequence>
</xs:group>
<xs:group name="while-statement">
<xs:sequence>
<xs:element ref="while"/>
</xs:sequence>
</xs:group>
<xs:group name="for-statement">
<xs:sequence>
<xs:element ref="for"/>
</xs:sequence>
</xs:group>
<xs:group name="for-in-statement">
<xs:sequence>
<xs:element ref="for-in"/>
</xs:sequence>
</xs:group>
<xs:group name="for-of-statement">
<xs:sequence>
<xs:element ref="for-of"/>
</xs:sequence>
</xs:group>
<xs:group name="for-source">
<xs:choice>
<xs:group ref="assign"/>
<xs:group ref="variable-statement"/>
<xs:group ref="lexical-declaration"/>
</xs:choice>
</xs:group>
<xs:group name="for-initialize">
<xs:sequence>
<xs:choice>
<xs:element name="initialize" type="expression-container"/>
<xs:element ref="var" maxOccurs="unbounded"/>
<xs:element ref="let" maxOccurs="unbounded"/>
<xs:element ref="const" maxOccurs="unbounded"/>
</xs:choice>
</xs:sequence>
</xs:group>
<xs:group name="for-condition">
<xs:sequence>
<xs:element name="condition" type="expression-container"/>
</xs:sequence>
</xs:group>
<xs:group name="for-update">
<xs:sequence>
<xs:element name="update" type="expression-container"/>
</xs:sequence>
</xs:group>
<xs:group name="contained-statements">
<xs:sequence>
<xs:element name="block" type="statement-container"/>
</xs:sequence>
</xs:group>
<xs:group name="switch-statement">
<xs:sequence>
<xs:element ref="switch"/>
</xs:sequence>
</xs:group>
<xs:group name="switch-test">
<xs:sequence>
<xs:element name="test" type="expression-container"/>
</xs:sequence>
</xs:group>
<xs:group name="switch-clauses">
<xs:sequence>
<xs:group ref="switch-cases"/>
<xs:group ref="switch-default-and-cases" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:group name="switch-cases">
<xs:sequence>
<xs:group ref="switch-case" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:group name="switch-default-and-cases">
<xs:sequence>
<xs:group ref="switch-default"/>
<xs:group ref="switch-cases"/>
</xs:sequence>
</xs:group>
<xs:group name="switch-case">
<xs:sequence>
<xs:element name="case" type="switch-case"/>
</xs:sequence>
</xs:group>
<xs:group name="case-value">
<xs:sequence>
<xs:element name="value" type="expression-container"/>
</xs:sequence>
</xs:group>
<xs:group name="switch-default">
<xs:sequence>
<xs:element name="default" type="switch-default"/>
</xs:sequence>
</xs:group>
<xs:group name="continue-statement">
<xs:sequence>
<xs:element ref="continue"/>
</xs:sequence>
</xs:group>
<xs:group name="break-statement">
<xs:sequence>
<xs:element ref="break"/>
</xs:sequence>
</xs:group>
<xs:group name="return-statement">
<xs:sequence>
<xs:element ref="return"/>
</xs:sequence>
</xs:group>
<xs:group name="with-statement">
<xs:sequence>
<xs:element ref="with"/>
</xs:sequence>
</xs:group>
<xs:group name="with-scope">
<xs:sequence>
<xs:element name="scope" type="expression-container"/>
</xs:sequence>
</xs:group>
<xs:group name="labelled-statement">
<xs:sequence>
<xs:element ref="label"/>
</xs:sequence>
</xs:group>
<xs:group name="throw-statement">
<xs:sequence>
<xs:element ref="throw"/>
</xs:sequence>
</xs:group>
<xs:group name="try-statement">
<xs:sequence>
<xs:element ref="try"/>
</xs:sequence>
</xs:group>
<xs:group name="catch">
<xs:sequence>
<xs:element name="catch" type="catch"/>
</xs:sequence>
</xs:group>
<xs:group name="catch-parameter">
<xs:sequence>
<xs:element name="parameter" type="catch-parameter"/>
</xs:sequence>
</xs:group>
<xs:group name="finally">
<xs:sequence>
<xs:element name="finally" type="statement-container"/>
</xs:sequence>
</xs:group>
<xs:group name="catch-finally">
<xs:sequence>
<xs:group ref="catch"/>
<xs:group ref="finally" minOccurs="0"/>
</xs:sequence>
</xs:group>
<xs:group name="debugger-statement">
<xs:sequence>
<xs:element ref="debugger"/>
</xs:sequence>
</xs:group>
<xs:group name="statement-list">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="statement"/>
<xs:group ref="declaration"/>
<xs:group ref="scope"/>
</xs:choice>
</xs:sequence>
</xs:group>
<xs:complexType name="meta" mixed="true">
<xs:annotation>
<xs:documentation>
Meta information, allowing to attach custom information to any element.
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:any processContents="skip"/>
</xs:choice>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
<xs:complexType name="comment" mixed="true">
<xs:sequence>
<xs:any namespace="##any" processContents="skip"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="doc" type="xs:boolean"
default="false" use="optional"/>
</xs:complexType>
<xs:complexType name="base-element">
<xs:annotation>
<xs:documentation>
Base element of the ecmascript xml object model.
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="meta"/>
<xs:element ref="comment"/>
</xs:choice>
<xs:attribute name="id" type="xs:ID" use="optional"/>
<xs:attribute name="ref" type="xs:IDREF" use="optional"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
<xs:complexType name="name">
<xs:complexContent>
<xs:extension base="base-element">
<xs:attribute name="value" type="identifier" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="property-name">
<xs:annotation>
<xs:documentation>
NOTE: either value or assignment-expression is required.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="assignment-expression" minOccurs="0"/>
<xs:attribute name="value" type="identifier" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="member">
<xs:complexContent>
<xs:extension base="base-element"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="member-definition">
<xs:annotation>
<xs:documentation>
NOTE: assignment-expression is optional in case of name identifier;
otherwise it's required.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="member">
<xs:sequence>
<xs:group ref="property-name"/>
<xs:group ref="assignment-expression" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="method">
<xs:complexContent>
<xs:extension base="function-declaration">
<xs:attribute name="type" use="optional" default="method">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="method"/>
<xs:enumeration value="getter"/>
<xs:enumeration value="setter"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="class-method">
<xs:complexContent>
<xs:extension base="method">
<xs:attribute name="static" type="xs:boolean"
use="optional" default="false"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="object-member-scope">
<xs:complexContent>
<xs:extension base="member">
<xs:group ref="object-member" minOccurs="0" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="class-body-scope">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="class-body" minOccurs="0" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="expression">
<xs:complexContent>
<xs:extension base="base-element"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="statement">
<xs:complexContent>
<xs:extension base="base-element"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="declaration">
<xs:complexContent>
<xs:extension base="base-element"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="simple-ref">
<xs:complexContent>
<xs:extension base="expression">
<xs:attribute name="name" type="identifier" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ref">
<xs:complexContent>
<xs:extension base="simple-ref">
<xs:group ref="member-expression" minOccurs="0"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="boolean">
<xs:complexContent>
<xs:extension base="expression">
<xs:attribute name="value" type="xs:boolean" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="number">
<xs:complexContent>
<xs:extension base="expression">
<xs:attribute name="value" type="xs:double" use="required"/>
<xs:attribute name="form" default="decimal" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="decimal"/>
<xs:enumeration value="binary"/>
<xs:enumeration value="octal"/>
<xs:enumeration value="hex"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="string">
<xs:complexContent>
<xs:extension base="expression">
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="regex">
<xs:complexContent>
<xs:extension base="expression">
<xs:attribute name="value" type="xs:string" use="required"/>
<xs:attribute name="flags" type="xs:string" use="optional"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="template">
<xs:annotation>
<xs:documentation>
Template part are composed from a list of expressions.
string expression is used to express template characters, other
expressions are used in expression place holders.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="assignment-expression"
minOccurs="1" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="parens">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="spread">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="assignment-expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="array">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="array-element" minOccurs="0" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="object">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="object-member" minOccurs="0" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="conditional">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="logical-or-expression"/>
<xs:group ref="assignment-expression" minOccurs="2" maxOccurs="2"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="or">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="logical-or-expression"/>
<xs:group ref="logical-and-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="and">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="logical-and-expression"/>
<xs:group ref="bitwise-or-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="bitwise-or">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="bitwise-or-expression"/>
<xs:group ref="bitwise-xor-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="bitwise-xor">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="bitwise-xor-expression"/>
<xs:group ref="bitwise-and-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="bitwise-and">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="bitwise-and-expression"/>
<xs:group ref="equality-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="equality-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="equality-expression"/>
<xs:group ref="relational-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="relational-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="relational-expression"/>
<xs:group ref="shift-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="shift-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="shift-expression"/>
<xs:group ref="additive-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="additive-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="additive-expression"/>
<xs:group ref="multiplicative-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="multiplicative-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="multiplicative-expression"/>
<xs:group ref="unary-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="unary-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="unary-expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="postfix-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="lefthand-side-expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="subscript">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="member-expression"/>
<xs:group ref="expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="tag">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="member-expression"/>
<xs:group ref="template-literal"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="call">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="member-expression"/>
<xs:group ref="arguments" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="yield">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="assignment-expression" minOccurs="0"/>
<xs:attribute name="delegate" type="xs:boolean"
use="optional" default="false"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="arrow-function">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="formal-parameters" minOccurs="0"/>
<xs:choice>
<xs:group ref="function-body"/>
<xs:group ref="arrow-expression-body"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="arrow-expression-body">
<xs:complexContent>
<xs:extension base="statement">
<xs:annotation>
<xs:documentation>
NOTE: wrap object literal in parens.
</xs:documentation>
</xs:annotation>
<xs:group ref="assignment-expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="assignment-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:choice>
<xs:group ref="binding-pattern"/>
<xs:group ref="lefthand-side-expression"/>
</xs:choice>
<xs:group ref="assignment-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="assignment-operator-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:sequence>
<xs:group ref="lefthand-side-expression"/>
<xs:group ref="assignment-expression"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="binding-pattern">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="binding-pattern-content"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="object-binding-pattern">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="binding-property" minOccurs="0" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="binding-property">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:group ref="property-name"/>
<xs:choice minOccurs="0">
<xs:group ref="simple-ref"/>
<xs:group ref="binding-pattern-content"/>
</xs:choice>
<xs:group ref="binding-initialize" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="binding-initialize">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="assignment-expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="array-binding-pattern">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="simple-ref"/>
<xs:group ref="binding-pattern-content"/>
<xs:group ref="binding-elision"/>
<xs:group ref="binding-element"/>
</xs:choice>
<xs:group ref="binding-spread" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="binding-element">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:choice>
<xs:group ref="simple-ref"/>
<xs:group ref="binding-pattern-content"/>
</xs:choice>
<xs:group ref="binding-initialize"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="binding-spread">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="simple-ref"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="function-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="function-declaration-content"/>
<xs:attribute name="generator" type="xs:boolean"
use="optional" default="false">
<xs:annotation>
<xs:documentation>
Indicates a generator function.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="function-declaration">
<xs:complexContent>
<xs:extension base="declaration">
<xs:group ref="function-declaration-content"/>
<xs:attribute name="generator" type="xs:boolean"
use="optional" default="false">
<xs:annotation>
<xs:documentation>
Indicates a generator function.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="module-function-declaration">
<xs:complexContent>
<xs:extension base="function-declaration">
<xs:attributeGroup ref="export"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="base-formal-parameter">
<xs:complexContent>
<xs:extension base="base-element"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="formal-parameter">
<xs:complexContent>
<xs:extension base="base-formal-parameter">
<xs:sequence>
<xs:group ref="name-or-pattern"/>
<xs:group ref="binding-initialize" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="formal-rest-parameter">
<xs:complexContent>
<xs:extension base="base-formal-parameter">
<xs:group ref="name"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="class-expression">
<xs:complexContent>
<xs:extension base="expression">
<xs:group ref="class-declaration-content"/>
<xs:attributeGroup ref="export"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="class-declaration">
<xs:complexContent>
<xs:extension base="declaration">
<xs:group ref="class-declaration-content"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="module-class-declaration">
<xs:complexContent>
<xs:extension base="class-declaration">
<xs:attributeGroup ref="export"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="class-heritage">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="lefthand-side-expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="lexical-declaration">
<xs:annotation>
<xs:documentation>
NOTE: This production defines a single declaration.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="declaration">
<xs:group ref="lexical-declaration-content"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="module-lexical-declaration">
<xs:complexContent>
<xs:extension base="lexical-declaration">
<xs:attributeGroup ref="export"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="variable-statement">
<xs:annotation>
<xs:documentation>
NOTE: This production defines a single declaration.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="statement">
<xs:group ref="lexical-declaration-content"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="module-variable-statement">
<xs:complexContent>
<xs:extension base="variable-statement">
<xs:attributeGroup ref="export"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="statement-container">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="statement-list"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="block-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:group ref="statement-list"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="expression-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:group ref="expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="module-expression-statement">
<xs:annotation>
<xs:documentation>
NOTE: In case of export is default, expression can be
assignment-expression only.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="expression-statement">
<xs:attribute name="export" use="optional" default="false">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="false"/>
<xs:enumeration value="default"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="expression-container">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="if-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:sequence>
<xs:element name="condition" type="expression-container"/>
<xs:element name="then" type="statement-container"/>
<xs:element name="else" type="statement-container" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="switch-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:sequence>
<xs:group ref="switch-test"/>
<xs:group ref="switch-clauses"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="switch-case">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:group ref="case-value"/>
<xs:group ref="contained-statements" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="switch-default">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="statement-list"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="do-while-statement">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:group ref="contained-statements" minOccurs="0"/>
<xs:element name="condition" type="expression-container"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="while-statement">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:element name="condition" type="expression-container"/>
<xs:group ref="contained-statements" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="for-statement">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:group ref="for-initialize" minOccurs="0"/>
<xs:group ref="for-condition" minOccurs="0"/>
<xs:group ref="for-update" minOccurs="0"/>
<xs:group ref="contained-statements" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="for-key-value-statement">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:sequence>
<xs:group ref="for-source"/>
<xs:group ref="contained-statements" minOccurs="0"/>
</xs:sequence>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="continue-or-break-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:group ref="simple-ref" minOccurs="0"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="return-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:group ref="expression" minOccurs="0"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="with-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:sequence>
<xs:group ref="with-scope"/>
<xs:group ref="contained-statements" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="labelled-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:sequence>
<xs:group ref="name"/>
<xs:choice>
<xs:group ref="statement"/>
<xs:group ref="function-declaration"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="throw-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:group ref="expression"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="try-statement">
<xs:complexContent>
<xs:extension base="statement">
<xs:sequence>
<xs:group ref="contained-statements" minOccurs="0"/>
<xs:choice>
<xs:group ref="catch-finally"/>
<xs:group ref="finally"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="catch">
<xs:complexContent>
<xs:extension base="statement">
<xs:sequence>
<xs:group ref="catch-parameter"/>
<xs:group ref="contained-statements" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="catch-parameter">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="name-or-pattern"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="base-program">
<xs:complexContent>
<xs:extension base="base-element"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="script">
<xs:complexContent>
<xs:extension base="base-program">
<xs:group ref="statement-list"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="module">
<xs:complexContent>
<xs:extension base="base-program">
<xs:group ref="module-item" minOccurs="0" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="module-scope">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="module-item" minOccurs="0" maxOccurs="unbounded"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="import-declaration">
<xs:complexContent>
<xs:extension base="base-element">
<xs:sequence>
<xs:group ref="import-default-binding" minOccurs="0"/>
<xs:choice minOccurs="0">
<xs:group ref="namespace-import"/>
<xs:group ref="member-specifier"
minOccurs="1" maxOccurs="unbounded"/>
</xs:choice>
<xs:group ref="from-clause"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="export-declaration">
<xs:complexContent>
<xs:extension base="base-element">
<xs:choice>
<xs:group ref="export-namespace-declaration"/>
<xs:group ref="export-clause-declaration"/>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="from-clause">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="string-literal"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="namespace-import">
<xs:complexContent>
<xs:extension base="base-element">
<xs:group ref="name"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="member-specifier">
<xs:complexContent>
<xs:extension base="simple-ref">
<xs:group ref="name" minOccurs="0"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.