| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="generator" content="Asciidoctor 1.5.5"> |
| <meta name="author" content="2019-08-08 13:15:33 CEST"> |
| <title>N4JS Language Specification</title> |
| <link rel="stylesheet" href="styles/spec.min.css"> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css"> |
| <!-- ************* docinfo ******************************************************************* --> |
| |
| |
| <!-- ************* Favicon ************--> |
| <link rel="icon" href="images/favicon.ico" /> |
| |
| <!-- ************* Back-to-top JQuery ************* --> |
| <script src="https://code.jquery.com/jquery-1.12.4.js"></script> |
| <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script> |
| |
| |
| <link href="styles/prism.min.css" rel="stylesheet" /> |
| <script type="text/javascript" async |
| src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"> |
| </script> |
| |
| <!-- ************* Styles ************* --> |
| <link rel="stylesheet" type="text/css" href="styles/n4jsspec-adoc.css"> |
| |
| |
| <!-- ****************** NavBar ****************** --> |
| <div id="menubar"> |
| <div class="banner"> |
| <a href="https://www.eclipse.org/n4js/#"><img id="logo" src="images/n4js-logo.png" alt="Eclipse N4JS"></a> |
| </div> |
| <ul> |
| <li><a href="index.html">Index</a></li> |
| </ul> |
| </div> |
| <!-- ************* docinfo ******************************************************************* --> |
| <style> |
| .admonitionblock td.icon .icon-todo:before{content:"\f249";color:#f4ee42} |
| </style> |
| </head> |
| <body class="book toc2 toc-left"> |
| <div id="header"> |
| <h1>N4JS Language Specification</h1> |
| <div class="details"> |
| <span id="author" class="author">2019-08-08 13:15:33 CEST</span><br> |
| <span id="revnumber">version 0.9</span> |
| </div> |
| <div id="toc" class="toc2"> |
| <div id="toctitle">Table of Contents</div> |
| <ul class="sectlevel1"> |
| <li><a href="introduction.html#_introduction">1. Introduction</a> |
| <ul class="sectlevel2"> |
| <li><a href="introduction.html#_notation">1.1. Notation</a> |
| <ul class="sectlevel3"> |
| <li><a href="introduction.html#_grammar-notation">1.1.1. Grammar Notation</a></li> |
| <li><a href="introduction.html#_type-judgments-and-rules-and-constraints-notation">1.1.2. Type Judgments and Rules and Constraints Notation</a> |
| <ul class="sectlevel4"> |
| <li><a href="introduction.html#_typing-rules-and-judgments">1.1.2.1. Typing Rules and Judgments</a></li> |
| <li><a href="introduction.html#_types-of-an-element">1.1.2.2. Types of an Element</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="introduction.html#_auxiliary-functions">1.2. Auxiliary Functions</a> |
| <ul class="sectlevel3"> |
| <li><a href="introduction.html#_binding">1.2.1. Binding</a></li> |
| <li><a href="introduction.html#_merging-types">1.2.2. Merging Types</a> |
| <ul class="sectlevel4"> |
| <li><a href="introduction.html#_logic-formulas">1.2.2.1. Logic Formulas</a></li> |
| </ul> |
| </li> |
| <li><a href="introduction.html#_symbols-and-font-convention">1.2.3. Symbols and Font Convention</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="grammar.html#_grammar">2. Grammar</a> |
| <ul class="sectlevel2"> |
| <li><a href="grammar.html#_lexical-conventions">2.1. Lexical Conventions</a> |
| <ul class="sectlevel3"> |
| <li><a href="grammar.html#_identifier-names-and-identifiers">2.1.1. Identifier Names and Identifiers</a></li> |
| <li><a href="grammar.html#_this-keyword">2.1.2. This Keyword</a></li> |
| <li><a href="grammar.html#_regular-expression-literals">2.1.3. Regular Expression Literals</a></li> |
| <li><a href="grammar.html#_automatic-semicolon-insertion">2.1.4. Automatic Semicolon Insertion</a></li> |
| <li><a href="grammar.html#_jsdoc">2.1.5. JSDoc</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="names.html#_names">3. Names</a> |
| <ul class="sectlevel2"> |
| <li><a href="names.html#_access-control">3.1. Access Control</a></li> |
| <li><a href="names.html#_accessibility-of-types-top-level-variables-and-function-declarations">3.2. Accessibility of Types, Top-Level Variables and Function Declarations</a> |
| <ul class="sectlevel3"> |
| <li><a href="names.html#_accessibility-of-members">3.2.1. Accessibility of Members</a></li> |
| <li><a href="names.html#_valid-names">3.2.2. Valid Names</a></li> |
| <li><a href="names.html#_qualified-names">3.2.3. Qualified Names</a></li> |
| <li><a href="names.html#_name-duplicates">3.2.4. Name Duplicates</a> |
| <ul class="sectlevel4"> |
| <li><a href="names.html#_lexical-environment">3.2.4.1. Lexical Environment</a></li> |
| <li><a href="names.html#_duplicates-and-shadowing">3.2.4.2. Duplicates and Shadowing</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="types.html#_types">4. Types</a> |
| <ul class="sectlevel2"> |
| <li><a href="types.html#_overview">4.1. Overview</a></li> |
| <li><a href="types.html#_type-expressions">4.2. Type Expressions</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_syntax">4.2.1. Syntax</a></li> |
| <li><a href="types.html#_properties">4.2.2. Properties</a></li> |
| <li><a href="types.html#_semantics">4.2.3. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_type-inference">4.3. Type Inference</a></li> |
| <li><a href="types.html#_generic-and-parameterized-types">4.4. Generic and Parameterized Types</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_generic-types">4.4.1. Generic Types</a></li> |
| <li><a href="types.html#_type-variables">4.4.2. Type Variables</a></li> |
| <li><a href="types.html#_parameterized-types">4.4.3. Parameterized Types</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_primitive-ecmascript-types">4.5. Primitive ECMAScript Types</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_undefined-type">4.5.1. Undefined Type</a></li> |
| <li><a href="types.html#_null-type">4.5.2. Null Type</a></li> |
| <li><a href="types.html#_primitive-boolean-type">4.5.3. Primitive Boolean Type</a></li> |
| <li><a href="types.html#_primitive-string-type">4.5.4. Primitive String Type</a></li> |
| <li><a href="types.html#_primitive-number-type">4.5.5. Primitive Number Type</a></li> |
| <li><a href="types.html#_primitive-type-int">4.5.6. Primitive Type int</a></li> |
| <li><a href="types.html#_primitive-symbol-type">4.5.7. Primitive Symbol Type</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_primitive-n4js-types">4.6. Primitive N4JS Types</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_any-type">4.6.1. Any Type</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#any-type-semantics">4.6.1.1. Semantics</a></li> |
| <li><a href="types.html#any-type-type-inference">4.6.1.2. Type Inference</a> |
| <ul class="sectlevel5"> |
| <li><a href="types.html#_default-type-of-variables">4.6.1.2.1. Default Type of Variables</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="types.html#_void-type">4.6.2. Void Type</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#void-type-semantics">4.6.2.1. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_unknown-type">4.6.3. Unknown Type</a></li> |
| <li><a href="types.html#_primitive-pathselector-and-i18nkey">4.6.4. Primitive Pathselector and I18nKey</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#pathselector-semantics">4.6.4.1. Semantics</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="types.html#_built-in-ecmascript-object-types">4.7. Built-in ECMAScript Object Types</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#ECMAScript-objects-semantics">4.7.1. Semantics</a></li> |
| <li><a href="types.html#_object-type">4.7.2. Object Type</a></li> |
| <li><a href="types.html#_function-object-type">4.7.3. Function-Object-Type</a></li> |
| <li><a href="types.html#_array-object-type">4.7.4. Array Object Type</a></li> |
| <li><a href="types.html#_string-object-type">4.7.5. String Object Type</a></li> |
| <li><a href="types.html#_boolean-object-type">4.7.6. Boolean Object Type</a></li> |
| <li><a href="types.html#_number-object-type">4.7.7. Number Object Type</a></li> |
| <li><a href="types.html#_global-object-type">4.7.8. Global Object Type</a></li> |
| <li><a href="types.html#_symbol">4.7.9. Symbol</a></li> |
| <li><a href="types.html#_promise">4.7.10. Promise</a></li> |
| <li><a href="types.html#_iterator-interface">4.7.11. Iterator Interface</a></li> |
| <li><a href="types.html#_iterable-interface">4.7.12. Iterable Interface</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_built-in-n4js-types">4.8. Built-In N4JS Types</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_n4object">4.8.1. N4Object</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#N4Object-semantics">4.8.1.1. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_n4class">4.8.2. N4Class</a></li> |
| <li><a href="types.html#IterableN">4.8.3. IterableN</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_type-modifiers">4.9. Type Modifiers</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#Type_Modifiers_Dynamic">4.9.1. Dynamic</a></li> |
| <li><a href="types.html#_optional-return-types">4.9.2. Optional Return Types</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_union-and-intersection-type-composed-types">4.10. Union and Intersection Type (Composed Types)</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_union-type">4.10.1. Union Type</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#union-type-syntax">4.10.1.1. Syntax</a></li> |
| <li><a href="types.html#union-type-semantics">4.10.1.2. Semantics</a></li> |
| <li><a href="types.html#_warnings">4.10.1.3. Warnings</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_intersection-type">4.10.2. Intersection Type</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#intersection-type-syntax">4.10.2.1. Syntax</a></li> |
| <li><a href="types.html#intersection-type-semantics">4.10.2.2. Semantics</a></li> |
| <li><a href="types.html#_warnings-2">4.10.2.3. Warnings</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_composed-types-in-wildcards">4.10.3. Composed Types in Wildcards</a></li> |
| <li><a href="types.html#_property-access-for-composed-types">4.10.4. Property Access for Composed Types</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#_properties-of-union-type">4.10.4.1. Properties of Union Type</a> |
| <ul class="sectlevel5"> |
| <li><a href="types.html#_remarks-on-union-type-s-members">4.10.4.1.1. Remarks on union type’s members:</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_properties-of-intersection-type">4.10.4.2. Properties of Intersection Type</a> |
| <ul class="sectlevel5"> |
| <li><a href="types.html#_remarks-on-intersection-type-s-methods">4.10.4.2.1. Remarks on intersection type’s methods:</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="types.html#_constructor-and-classifier-type">4.11. Constructor and Classifier Type</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_syntax-3">4.11.1. Syntax</a></li> |
| <li><a href="types.html#_semantics-2">4.11.2. Semantics</a></li> |
| <li><a href="types.html#_constructors-and-prototypes-in-ecmascript-2015">4.11.3. Constructors and Prototypes in ECMAScript 2015</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_this-type">4.12. This Type</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#this-type-syntax">4.12.1. Syntax</a></li> |
| <li><a href="types.html#this-keyword-semantics">4.12.2. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_enums">4.13. Enums</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_enums-n4js">4.13.1. Enums (N4JS)</a> |
| <ul class="sectlevel4"> |
| <li><a href="types.html#enums-syntax">4.13.1.1. Syntax</a></li> |
| <li><a href="types.html#enums-semantics">4.13.1.2. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_string-based-enums">4.13.2. String-Based Enums</a></li> |
| </ul> |
| </li> |
| <li><a href="types.html#_short-hand-syntax">4.14. Short-Hand Syntax</a> |
| <ul class="sectlevel3"> |
| <li><a href="types.html#_array-short-hand-syntax">4.14.1. Array Short-Hand Syntax</a></li> |
| <li><a href="types.html#_iterablen-short-hand-syntax">4.14.2. IterableN Short-Hand Syntax</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_classifiers">5. Classifiers</a> |
| <ul class="sectlevel2"> |
| <li><a href="classifiers.html#_n4js-specific-classifiers">5.1. N4JS Specific Classifiers</a> |
| <ul class="sectlevel3"> |
| <li><a href="classifiers.html#_properties-2">5.1.1. Properties</a></li> |
| <li><a href="classifiers.html#_common-semantics-of-classifiers">5.1.2. Common Semantics of Classifiers</a></li> |
| <li><a href="classifiers.html#_classes">5.1.3. Classes</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_definition-of-classes">5.1.3.1. Definition of Classes</a> |
| <ul class="sectlevel5"> |
| <li><a href="classifiers.html#class-syntax">5.1.3.1.1. Syntax</a></li> |
| <li><a href="classifiers.html#class-properties">5.1.3.1.2. Properties</a></li> |
| <li><a href="classifiers.html#class-type-inference">5.1.3.1.3. Type Inference</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#class-semantics">5.1.3.2. Semantics</a></li> |
| <li><a href="classifiers.html#_final-modifier">5.1.3.3. Final Modifier</a></li> |
| <li><a href="classifiers.html#_abstract-classes">5.1.3.4. Abstract Classes</a></li> |
| <li><a href="classifiers.html#_non-instantiable-classes">5.1.3.5. Non-Instantiable Classes</a></li> |
| <li><a href="classifiers.html#_superclass">5.1.3.6. Superclass</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_interfaces">5.1.4. Interfaces</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_definition-of-interfaces">5.1.4.1. Definition of Interfaces</a> |
| <ul class="sectlevel5"> |
| <li><a href="classifiers.html#interfaces-syntax">5.1.4.1.1. Syntax</a></li> |
| <li><a href="classifiers.html#interfaces-properties">5.1.4.1.2. Properties</a></li> |
| <li><a href="classifiers.html#interfaces-type-inference">5.1.4.1.3. Type Inference</a></li> |
| <li><a href="classifiers.html#interfaces-semantics">5.1.4.1.4. Semantics</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_generic-classifiers">5.1.5. Generic Classifiers</a></li> |
| <li><a href="classifiers.html#sec:definition-site-variance">5.1.6. Definition-Site Variance</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_members">5.2. Members</a> |
| <ul class="sectlevel3"> |
| <li><a href="classifiers.html#_syntax-4">5.2.1. Syntax</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_properties-3">5.2.1.1. Properties</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_semantics-3">5.2.2. Semantics</a></li> |
| <li><a href="classifiers.html#_methods">5.2.3. Methods</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_syntax-5">5.2.3.1. Syntax</a></li> |
| <li><a href="classifiers.html#_properties-4">5.2.3.2. Properties</a></li> |
| <li><a href="classifiers.html#_semantics-4">5.2.3.3. Semantics</a></li> |
| <li><a href="classifiers.html#_final-methods">5.2.3.4. Final Methods</a></li> |
| <li><a href="classifiers.html#_abstract-methods">5.2.3.5. Abstract Methods</a></li> |
| <li><a href="classifiers.html#_generic-methods">5.2.3.6. Generic Methods</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_default-methods-in-interfaces">5.2.4. Default Methods in Interfaces</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_asynchronous-methods">5.2.4.1. Asynchronous Methods</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_constructors">5.2.5. Constructors</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_structural-this-type-in-constructor">5.2.5.1. Structural This Type in Constructor</a></li> |
| <li><a href="classifiers.html#spec-constructor">5.2.5.2. @Spec Constructor</a></li> |
| <li><a href="classifiers.html#_callable-constructors">5.2.5.3. Callable Constructors</a></li> |
| <li><a href="classifiers.html#_covariant-constructors">5.2.5.4. Covariant Constructors</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_data-fields">5.2.6. Data Fields</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#data-fields-syntax">5.2.6.1. Syntax</a></li> |
| <li><a href="classifiers.html#data-fields-properties">5.2.6.2. Properties</a> |
| <ul class="sectlevel5"> |
| <li><a href="classifiers.html#data-fields-semantics">5.2.6.2.1. Semantics</a></li> |
| <li><a href="classifiers.html#data-fields-type-inference">5.2.6.2.2. Type Inference</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_assignment-modifiers">5.2.6.3. Assignment Modifiers</a></li> |
| <li><a href="classifiers.html#_field-accessors-getter-setter">5.2.6.4. Field Accessors (Getter/Setter)</a> |
| <ul class="sectlevel5"> |
| <li><a href="classifiers.html#field-acessors-syntax">5.2.6.4.1. Syntax</a></li> |
| <li><a href="classifiers.html#field-acessors-properties">5.2.6.4.2. Properties</a></li> |
| <li><a href="classifiers.html#field-accessors-semantics">5.2.6.4.3. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#optional-fields">5.2.6.5. Optional Fields</a> |
| <ul class="sectlevel5"> |
| <li><a href="classifiers.html#_syntax-6">5.2.6.5.1. Syntax</a></li> |
| <li><a href="classifiers.html#_semantics-5">5.2.6.5.2. Semantics</a></li> |
| <li><a href="classifiers.html#_background">5.2.6.5.3. Background</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_static-members">5.2.7. Static Members</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_access-from-and-to-static-members">5.2.7.1. Access From and To Static Members</a></li> |
| <li><a href="classifiers.html#_generic-static-methods">5.2.7.2. Generic static methods</a></li> |
| <li><a href="classifiers.html#_static-members-of-interfaces">5.2.7.3. Static Members of Interfaces</a></li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_redefinition-of-members">5.2.8. Redefinition of Members</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_overriding-of-members">5.2.8.1. Overriding of Members</a></li> |
| <li><a href="classifiers.html#_implementation-of-members">5.2.8.2. Implementation of Members</a> |
| <ul class="sectlevel5"> |
| <li><a href="classifiers.html#_member-consumption">5.2.8.2.1. Member Consumption</a></li> |
| <li><a href="classifiers.html#_member-implementation">5.2.8.2.2. Member Implementation</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="classifiers.html#_structural-typing">5.3. Structural Typing</a> |
| <ul class="sectlevel3"> |
| <li><a href="classifiers.html#_syntax-7">5.3.1. Syntax</a></li> |
| <li><a href="classifiers.html#_definition-site-structural-typing">5.3.2. Definition Site Structural Typing</a></li> |
| <li><a href="classifiers.html#_use-site-structural-typing">5.3.3. Use-Site Structural Typing</a></li> |
| <li><a href="classifiers.html#structural-readWriteInit-field-typing">5.3.4. Structural Read-only, Write-only and Initializer Field Typing</a></li> |
| <li><a href="classifiers.html#_public-setter-annotated-with-code-providesinitializer-code">5.3.5. Public Setter Annotated With <code>ProvidesInitializer</code></a></li> |
| <li><a href="classifiers.html#_structural-types-with-optional-fields">5.3.6. Structural Types With Optional Fields</a></li> |
| <li><a href="classifiers.html#_structural-types-with-access-modifier">5.3.7. Structural Types With Access Modifier</a></li> |
| <li><a href="classifiers.html#_structural-types-with-additional-members">5.3.8. Structural Types With Additional Members</a> |
| <ul class="sectlevel4"> |
| <li><a href="classifiers.html#_syntax-8">5.3.8.1. Syntax</a> |
| <ul class="sectlevel5"> |
| <li><a href="classifiers.html#_semantics-6">5.3.8.1.1. Semantics</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_functions">6. Functions</a> |
| <ul class="sectlevel2"> |
| <li><a href="functions.html#_function-type">6.1. Function Type</a> |
| <ul class="sectlevel3"> |
| <li><a href="functions.html#_properties-5">6.1.1. Properties</a></li> |
| <li><a href="functions.html#function-type-inference">6.1.2. Type Inference</a></li> |
| <li><a href="functions.html#_autoboxing-of-function-type">6.1.3. Autoboxing of Function Type</a></li> |
| <li><a href="functions.html#_arguments-object">6.1.4. Arguments Object</a></li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_ecmascript-5-function-definition">6.2. ECMAScript 5 Function Definition</a> |
| <ul class="sectlevel3"> |
| <li><a href="functions.html#_function-declaration">6.2.1. Function Declaration</a> |
| <ul class="sectlevel4"> |
| <li><a href="functions.html#_syntax-9">6.2.1.1. Syntax</a></li> |
| <li><a href="functions.html#_semantics-8">6.2.1.2. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_function-expression">6.2.2. Function Expression</a> |
| <ul class="sectlevel4"> |
| <li><a href="functions.html#function-expression-syntax">6.2.2.1. Syntax</a></li> |
| <li><a href="functions.html#_semantics-and-type-inference">6.2.2.2. Semantics and Type Inference</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_ecmascript-2015-function-definition">6.3. ECMAScript 2015 Function Definition</a> |
| <ul class="sectlevel3"> |
| <li><a href="functions.html#_formal-parameters">6.3.1. Formal Parameters</a> |
| <ul class="sectlevel4"> |
| <li><a href="functions.html#Type_Modifiers_Optional">6.3.1.1. Optional Parameters</a></li> |
| <li><a href="functions.html#Type_Modifiers_Default">6.3.1.2. Default Parameters</a></li> |
| <li><a href="functions.html#Type_Modifiers_Variadic">6.3.1.3. Variadic</a></li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_generator-functions">6.3.2. Generator Functions</a> |
| <ul class="sectlevel4"> |
| <li><a href="functions.html#generator-functions-syntax">6.3.2.1. Syntax</a></li> |
| <li><a href="functions.html#generator-functions-semantics">6.3.2.2. Semantics</a></li> |
| <li><a href="functions.html#_generator-arrow-functions">6.3.2.3. Generator Arrow Functions</a></li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_arrow-function-expression">6.3.3. Arrow Function Expression</a> |
| <ul class="sectlevel4"> |
| <li><a href="functions.html#arrow-function-expression-syntax">6.3.3.1. Syntax</a></li> |
| <li><a href="functions.html#arrow-function-expression-semantics-and-type-inference">6.3.3.2. Semantics and Type Inference</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_ecmascript-proposals-function-definition">6.4. ECMAScript Proposals Function Definition</a> |
| <ul class="sectlevel3"> |
| <li><a href="functions.html#_asynchronous-functions">6.4.1. Asynchronous Functions</a> |
| <ul class="sectlevel4"> |
| <li><a href="functions.html#asynchronous-functions-syntax">6.4.1.1. Syntax</a></li> |
| <li><a href="functions.html#asynchronous-functions-semantics">6.4.1.2. Semantics</a></li> |
| <li><a href="functions.html#_asynchronous-arrow-functions">6.4.1.3. Asynchronous Arrow Functions</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="functions.html#_n4js-extended-function-definition">6.5. N4JS Extended Function Definition</a> |
| <ul class="sectlevel3"> |
| <li><a href="functions.html#_generic-functions">6.5.1. Generic Functions</a></li> |
| <li><a href="functions.html#_promisifiable-functions">6.5.2. Promisifiable Functions</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="conversions_and_reflection.html#_conversions-and-reflection">7. Conversions and Reflection</a> |
| <ul class="sectlevel2"> |
| <li><a href="conversions_and_reflection.html#_autoboxing-and-coercing">7.1. Autoboxing and Coercing</a> |
| <ul class="sectlevel3"> |
| <li><a href="conversions_and_reflection.html#_coercing">7.1.1. Coercing</a></li> |
| <li><a href="conversions_and_reflection.html#_autoboxing-of-primitives">7.1.2. Autoboxing of Primitives</a></li> |
| <li><a href="conversions_and_reflection.html#_autoboxing-of-function-expressions-and-declarations">7.1.3. Autoboxing of Function Expressions and Declarations</a></li> |
| </ul> |
| </li> |
| <li><a href="conversions_and_reflection.html#_auto-conversion-of-objects">7.2. Auto-Conversion of Objects</a> |
| <ul class="sectlevel3"> |
| <li><a href="conversions_and_reflection.html#_auto-conversion-of-class-instances">7.2.1. Auto-Conversion of Class Instances</a> |
| <ul class="sectlevel4"> |
| <li><a href="conversions_and_reflection.html#_auto-conversion-of-interface-instances">7.2.1.1. Auto-Conversion of Interface Instances</a></li> |
| </ul> |
| </li> |
| <li><a href="conversions_and_reflection.html#_auto-conversion-of-enum-literals">7.2.2. Auto-Conversion of Enum Literals</a></li> |
| </ul> |
| </li> |
| <li><a href="conversions_and_reflection.html#_type-cast-and-type-check">7.3. Type Cast and Type Check</a> |
| <ul class="sectlevel3"> |
| <li><a href="conversions_and_reflection.html#_type-cast">7.3.1. Type Cast</a></li> |
| <li><a href="conversions_and_reflection.html#_type-check">7.3.2. Type Check</a></li> |
| </ul> |
| </li> |
| <li><a href="conversions_and_reflection.html#_reflection-meta-information">7.4. Reflection meta-information</a> |
| <ul class="sectlevel3"> |
| <li><a href="conversions_and_reflection.html#_reflection-for-classes">7.4.1. Reflection for Classes</a></li> |
| <li><a href="conversions_and_reflection.html#_reflection-for-interfaces">7.4.2. Reflection for Interfaces</a></li> |
| <li><a href="conversions_and_reflection.html#_reflection-for-enumerations">7.4.3. Reflection for Enumerations</a></li> |
| </ul> |
| </li> |
| <li><a href="conversions_and_reflection.html#_conversion-of-primitive-types">7.5. Conversion of primitive types</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_expressions">8. Expressions</a> |
| <ul class="sectlevel2"> |
| <li><a href="expressions.html#_ecmascript-5-expressions">8.1. ECMAScript 5 Expressions</a> |
| <ul class="sectlevel3"> |
| <li><a href="expressions.html#_the-this-literal">8.1.1. The this Literal</a></li> |
| <li><a href="expressions.html#_identifier">8.1.2. Identifier</a></li> |
| <li><a href="expressions.html#_literals">8.1.3. Literals</a> |
| <ul class="sectlevel4"> |
| <li><a href="expressions.html#_integer-literals">8.1.3.1. Integer Literals</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_array-literal">8.1.4. Array Literal</a></li> |
| <li><a href="expressions.html#_object-literal">8.1.5. Object Literal</a> |
| <ul class="sectlevel4"> |
| <li><a href="expressions.html#_properties-6">8.1.5.1. Properties</a></li> |
| <li><a href="expressions.html#_scoping-and-linking">8.1.5.2. Scoping and linking</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_parenthesized-expression-and-grouping-operator">8.1.6. Parenthesized Expression and Grouping Operator</a></li> |
| <li><a href="expressions.html#_property-accessors">8.1.7. Property Accessors</a> |
| <ul class="sectlevel4"> |
| <li><a href="expressions.html#properties-1">8.1.7.1. Properties</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_new-expression">8.1.8. New Expression</a></li> |
| <li><a href="expressions.html#_function-expression-2">8.1.9. Function Expression</a></li> |
| <li><a href="expressions.html#_function-calls">8.1.10. Function Calls</a></li> |
| <li><a href="expressions.html#_postfix-expression">8.1.11. Postfix Expression</a></li> |
| <li><a href="expressions.html#_unary-expression">8.1.12. Unary Expression</a></li> |
| <li><a href="expressions.html#_multiplicative-expression">8.1.13. Multiplicative Expression</a></li> |
| <li><a href="expressions.html#_additive-expression">8.1.14. Additive Expression</a> |
| <ul class="sectlevel4"> |
| <li><a href="expressions.html#type-inference-10">8.1.14.1. Type Inference</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_bitwise-shift-expression">8.1.15. Bitwise Shift Expression</a></li> |
| <li><a href="expressions.html#_relational-expression">8.1.16. Relational Expression</a></li> |
| <li><a href="expressions.html#_equality-expression">8.1.17. Equality Expression</a></li> |
| <li><a href="expressions.html#_binary-bitwise-expression">8.1.18. Binary Bitwise Expression</a></li> |
| <li><a href="expressions.html#_binary-logical-expression">8.1.19. Binary Logical Expression</a></li> |
| <li><a href="expressions.html#_conditional-expression">8.1.20. Conditional Expression</a></li> |
| <li><a href="expressions.html#_assignment-expression">8.1.21. Assignment Expression</a></li> |
| <li><a href="expressions.html#_comma-expression">8.1.22. Comma Expression</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_ecmascript-6-expressions">8.2. ECMAScript 6 Expressions</a> |
| <ul class="sectlevel3"> |
| <li><a href="expressions.html#_the-super-keyword">8.2.1. The super Keyword</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_ecmascript-7-expressions">8.3. ECMAScript 7 Expressions</a> |
| <ul class="sectlevel3"> |
| <li><a href="expressions.html#_await-expression">8.3.1. Await Expression</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#_n4js-specific-expressions">8.4. N4JS Specific Expressions</a> |
| <ul class="sectlevel3"> |
| <li><a href="expressions.html#_class-expression">8.4.1. Class Expression</a></li> |
| <li><a href="expressions.html#_cast-as-expression">8.4.2. Cast (As) Expression</a> |
| <ul class="sectlevel4"> |
| <li><a href="expressions.html#cast-as-expression-semantics-type-inference">8.4.2.1. Semantics and Type Inference</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#Import_Calls">8.4.3. Import Calls</a></li> |
| </ul> |
| </li> |
| <li><a href="expressions.html#compile-time-expressions">8.5. Compile-Time Expressions</a></li> |
| </ul> |
| </li> |
| <li><a href="statements.html#_statements">9. Statements</a> |
| <ul class="sectlevel2"> |
| <li><a href="statements.html#_ecmascript-5-statements">9.1. ECMAScript 5 Statements</a> |
| <ul class="sectlevel3"> |
| <li><a href="statements.html#_function-or-field-accessor-bodies">9.1.1. Function or Field Accessor Bodies</a></li> |
| <li><a href="statements.html#_variable-statement">9.1.2. Variable Statement</a></li> |
| <li><a href="statements.html#_if-statement">9.1.3. If Statement</a></li> |
| <li><a href="statements.html#_iteration-statements">9.1.4. Iteration Statements</a></li> |
| <li><a href="statements.html#_return-statement">9.1.5. Return Statement</a></li> |
| <li><a href="statements.html#_with-statement">9.1.6. With Statement</a></li> |
| <li><a href="statements.html#_switch-statement">9.1.7. Switch Statement</a></li> |
| <li><a href="statements.html#_throw-try-and-catch-statements">9.1.8. Throw, Try, and Catch Statements</a></li> |
| <li><a href="statements.html#_debugger-statement">9.1.9. Debugger Statement</a></li> |
| </ul> |
| </li> |
| <li><a href="statements.html#_ecmascript-6-statements">9.2. ECMAScript 6 Statements</a> |
| <ul class="sectlevel3"> |
| <li><a href="statements.html#_let">9.2.1. Let</a></li> |
| <li><a href="statements.html#_const">9.2.2. Const</a></li> |
| <li><a href="statements.html#_for-of-statement">9.2.3. <code>for …​ of</code> statement</a></li> |
| <li><a href="statements.html#_import-statement">9.2.4. Import Statement</a> |
| <ul class="sectlevel4"> |
| <li><a href="statements.html#Dynamic_Imports">9.2.4.1. Dynamic Imports</a></li> |
| <li><a href="statements.html#_immutabilaty-of-imports">9.2.4.2. Immutabilaty of Imports</a></li> |
| </ul> |
| </li> |
| <li><a href="statements.html#_export-statement">9.2.5. Export Statement</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="annotations.html#_annotations">10. Annotations</a> |
| <ul class="sectlevel2"> |
| <li><a href="annotations.html#_introduction-2">10.1. Introduction</a> |
| <ul class="sectlevel3"> |
| <li><a href="annotations.html#_syntax-13">10.1.1. Syntax</a></li> |
| <li><a href="annotations.html#_properties-7">10.1.2. Properties</a></li> |
| <li><a href="annotations.html#_element-specific-annotations">10.1.3. Element-Specific Annotations</a></li> |
| <li><a href="annotations.html#_general-annotations">10.1.4. General Annotations</a> |
| <ul class="sectlevel4"> |
| <li><a href="annotations.html#_idebug">10.1.4.1. IDEBUG</a></li> |
| </ul> |
| </li> |
| <li><a href="annotations.html#idebug-syntax">10.1.5. Syntax</a> |
| <ul class="sectlevel4"> |
| <li><a href="annotations.html#_semantics-11">10.1.5.1. Semantics</a></li> |
| <li><a href="annotations.html#_suppress-warnings">10.1.5.2. Suppress Warnings</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="annotations.html#_declaration-of-annotations">10.2. Declaration of Annotations</a></li> |
| </ul> |
| </li> |
| <li><a href="extended_fetaures.html#_extended-fetaures">11. Extended Fetaures</a> |
| <ul class="sectlevel2"> |
| <li><a href="extended_fetaures.html#_array-and-object-destructuring">11.1. Array and Object Destructuring</a> |
| <ul class="sectlevel3"> |
| <li><a href="extended_fetaures.html#_syntax-14">11.1.1. Syntax</a></li> |
| <li><a href="extended_fetaures.html#_semantics-12">11.1.2. Semantics</a></li> |
| </ul> |
| </li> |
| <li><a href="extended_fetaures.html#_dependency-injection">11.2. Dependency Injection</a> |
| <ul class="sectlevel3"> |
| <li><a href="extended_fetaures.html#_di-components-and-injectors">11.2.1. DI Components and Injectors</a> |
| <ul class="sectlevel4"> |
| <li><a href="extended_fetaures.html#_dicomponent-relations">11.2.1.1. DIComponent Relations</a></li> |
| </ul> |
| </li> |
| <li><a href="extended_fetaures.html#_binders-and-bindings">11.2.2. Binders and Bindings</a></li> |
| <li><a href="extended_fetaures.html#_injection-points">11.2.3. Injection Points</a> |
| <ul class="sectlevel4"> |
| <li><a href="extended_fetaures.html#_field-injection">11.2.3.1. Field Injection</a></li> |
| <li><a href="extended_fetaures.html#_constructor-injection">11.2.3.2. Constructor Injection</a></li> |
| <li><a href="extended_fetaures.html#_method-injection">11.2.3.3. Method Injection</a> |
| <ul class="sectlevel5"> |
| <li><a href="extended_fetaures.html#_provider">11.2.3.3.1. Provider</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="extended_fetaures.html#_n4js-di-life-cycle-and-scopes">11.2.4. N4JS DI Life Cycle and Scopes</a> |
| <ul class="sectlevel4"> |
| <li><a href="extended_fetaures.html#_injection-cylces">11.2.4.1. Injection Cylces</a></li> |
| <li><a href="extended_fetaures.html#_default-scope">11.2.4.2. Default Scope</a></li> |
| <li><a href="extended_fetaures.html#_singleton-scope">11.2.4.3. Singleton Scope</a></li> |
| <li><a href="extended_fetaures.html#_per-injection-chain-singleton">11.2.4.4. Per Injection Chain Singleton</a></li> |
| </ul> |
| </li> |
| <li><a href="extended_fetaures.html#_validation-of-callsites-targeting-n4injector-methods">11.2.5. Validation of callsites targeting N4Injector methods</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-annotations">11.2.6. N4JS DI Annotations</a> |
| <ul class="sectlevel4"> |
| <li><a href="extended_fetaures.html#_n4js-di-generateinjector">11.2.6.1. N4JS DI @GenerateInjector</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-withparentinjector">11.2.6.2. N4JS DI @WithParentInjector</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-usebinder">11.2.6.3. N4JS DI @UseBinder</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-binder">11.2.6.4. N4JS DI @Binder</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-bind">11.2.6.5. N4JS DI @Bind</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-provides">11.2.6.6. N4JS DI @Provides</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-inject">11.2.6.7. N4JS DI @Inject</a></li> |
| <li><a href="extended_fetaures.html#_n4js-di-singleton">11.2.6.8. N4JS DI @Singleton</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="extended_fetaures.html#_test-support">11.3. Test Support</a></li> |
| <li><a href="extended_fetaures.html#_polyfill-definitions">11.4. Polyfill Definitions</a> |
| <ul class="sectlevel3"> |
| <li><a href="extended_fetaures.html#_runtime-polyfill-definitions">11.4.1. Runtime Polyfill Definitions</a></li> |
| <li><a href="extended_fetaures.html#_static-polyfill-definitions">11.4.2. Static Polyfill Definitions</a></li> |
| <li><a href="extended_fetaures.html#_transpiling-static-polyfilled-classes">11.4.3. Transpiling static polyfilled classes</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="components.html#_components">12. Components</a> |
| <ul class="sectlevel2"> |
| <li><a href="components.html#_overview-2">12.1. Overview</a></li> |
| <li><a href="components.html#Component_Types">12.2. Component Types</a> |
| <ul class="sectlevel3"> |
| <li><a href="components.html#_libraries">12.2.1. Libraries</a></li> |
| <li><a href="components.html#_runtime-environment-and-runtime-libraries">12.2.2. Runtime Environment and Runtime Libraries</a></li> |
| <li><a href="components.html#_tests">12.2.3. Tests</a></li> |
| <li><a href="components.html#_type-definitions">12.2.4. Type Definitions</a></li> |
| </ul> |
| </li> |
| <li><a href="components.html#package-json">12.3. Package.json File</a> |
| <ul class="sectlevel3"> |
| <li><a href="components.html#_basic-properties">12.3.1. Basic Properties</a></li> |
| <li><a href="components.html#_n4js-properties">12.3.2. N4JS Properties</a></li> |
| <li><a href="components.html#_constraints">12.3.3. Constraints</a></li> |
| </ul> |
| </li> |
| <li><a href="components.html#_support-for-npm-scopes">12.4. Support for NPM Scopes</a></li> |
| <li><a href="components.html#sec:N4JS-Type-Definitions">12.5. N4JS Type Definitions</a> |
| <ul class="sectlevel3"> |
| <li><a href="components.html#_specify-type-definition">12.5.1. Specify Type Definition</a></li> |
| <li><a href="components.html#_name-conventions">12.5.2. Name Conventions</a></li> |
| <li><a href="components.html#_version-conventions">12.5.3. Version Conventions</a> |
| <ul class="sectlevel4"> |
| <li><a href="components.html#_define-a-new-type-definition-package">12.5.3.1. Define a New Type Definition Package</a></li> |
| <li><a href="components.html#_using-a-type-definition-package">12.5.3.2. Using a Type Definition Package</a></li> |
| <li><a href="components.html#_rational">12.5.3.3. Rational</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="components.html#_modules">12.6. Modules</a></li> |
| <li><a href="components.html#_api-and-implementation-component">12.7. API and Implementation Component</a> |
| <ul class="sectlevel3"> |
| <li><a href="components.html#_execution-of-api-and-implementation-components">12.7.1. Execution of API and Implementation Components</a></li> |
| <li><a href="components.html#_api-and-implementation-with-di">12.7.2. API and Implementation With DI</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="plainjs.html#_plainjs">13. PlainJS</a> |
| <ul class="sectlevel2"> |
| <li><a href="plainjs.html#_type-inference-and-validation-for-plain-js">13.1. Type Inference and Validation for Plain JS</a></li> |
| <li><a href="plainjs.html#_external-declarations">13.2. External Declarations</a> |
| <ul class="sectlevel3"> |
| <li><a href="plainjs.html#_declaring-externals">13.2.1. Declaring externals</a></li> |
| <li><a href="plainjs.html#_instantiating-external-classes">13.2.2. Instantiating external classes</a></li> |
| <li><a href="plainjs.html#_implementation-of-external-declarations">13.2.3. Implementation of External Declarations</a></li> |
| <li><a href="plainjs.html#_example">13.2.4. Example</a></li> |
| </ul> |
| </li> |
| <li><a href="plainjs.html#_global-definitions">13.3. Global Definitions</a></li> |
| <li><a href="plainjs.html#_runtime-definitions">13.4. Runtime Definitions</a></li> |
| <li><a href="plainjs.html#_applying-polyfills">13.5. Applying Polyfills</a></li> |
| </ul> |
| </li> |
| <li><a href="jsdoc.html#_jsdoc-2">14. JSDoc</a> |
| <ul class="sectlevel2"> |
| <li><a href="jsdoc.html#_general-n4jsdoc-features">14.1. General N4JSDoc Features</a> |
| <ul class="sectlevel3"> |
| <li><a href="jsdoc.html#_provided-inline-tags">14.1.1. Provided Inline Tags</a> |
| <ul class="sectlevel4"> |
| <li><a href="jsdoc.html#jsdoc_tag__code">14.1.1.1. @code</a></li> |
| <li><a href="jsdoc.html#jsdoc_tag__link">14.1.1.2. @link</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="jsdoc.html#_n4jsdoc-for-user-projects">14.2. N4JSdoc for User Projects</a> |
| <ul class="sectlevel3"> |
| <li><a href="jsdoc.html#_standard-tags">14.2.1. Standard Tags</a> |
| <ul class="sectlevel4"> |
| <li><a href="jsdoc.html#_-author">14.2.1.1. @author</a></li> |
| <li><a href="jsdoc.html#jsdoc_tag_param">14.2.1.2. @param</a></li> |
| <li><a href="jsdoc.html#jsdoc_tag_return">14.2.1.3. @return</a></li> |
| </ul> |
| </li> |
| <li><a href="jsdoc.html#_test-related-tags">14.2.2. Test Related Tags</a> |
| <ul class="sectlevel4"> |
| <li><a href="jsdoc.html#jsdoc_tag__testee">14.2.2.1. @testee</a></li> |
| <li><a href="jsdoc.html#jsdoc_tag__testeeFromType">14.2.2.2. @testeeFromType</a></li> |
| <li><a href="jsdoc.html#_testeeType_and__testeeMember">14.2.2.3. @testeeType and @testeeMember</a></li> |
| <li><a href="jsdoc.html#jsdoc_tag_reqid_in_Tests">14.2.2.4. @reqid in Tests</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="jsdoc.html#_n4jsdoc-for-api-and-implementation-projects">14.3. N4JSDoc for API and Implementation Projects</a> |
| <ul class="sectlevel3"> |
| <li><a href="jsdoc.html#jsdoc_tag__apiNote">14.3.1. @apiNote</a></li> |
| <li><a href="jsdoc.html#API_Project_Tags">14.3.2. API Project Tags</a> |
| <ul class="sectlevel4"> |
| <li><a href="jsdoc.html#jsdoc_tag_apiState">14.3.2.1. @apiState</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="jsx.html#_jsx">15. JSX</a> |
| <ul class="sectlevel2"> |
| <li><a href="jsx.html#_jsx-support">15.1. JSX Support</a></li> |
| <li><a href="jsx.html#_jsx-backend">15.2. JSX Backend</a></li> |
| </ul> |
| </li> |
| <li><a href="#_grammars">16. Grammars</a> |
| <ul class="sectlevel2"> |
| <li><a href="#_type-expressions-grammar">16.1. Type Expressions Grammar</a></li> |
| <li><a href="#_n4js-language-grammar">16.2. N4JS Language Grammar</a></li> |
| </ul> |
| </li> |
| <li><a href="jsobjects.html#_jsobjects">17. JSObjects</a> |
| <ul class="sectlevel2"> |
| <li><a href="jsobjects.html#_object">17.1. Object</a></li> |
| <li><a href="jsobjects.html#_string">17.2. String</a></li> |
| <li><a href="jsobjects.html#_boolean">17.3. Boolean</a></li> |
| <li><a href="jsobjects.html#_number">17.4. Number</a> |
| <ul class="sectlevel3"> |
| <li><a href="jsobjects.html#_static-attributes">17.4.1. Static Attributes</a></li> |
| </ul> |
| </li> |
| <li><a href="jsobjects.html#function">17.5. Function</a></li> |
| <li><a href="jsobjects.html#_error">17.6. Error</a></li> |
| <li><a href="jsobjects.html#_array">17.7. Array</a></li> |
| <li><a href="jsobjects.html#_date">17.8. Date</a></li> |
| <li><a href="jsobjects.html#_math">17.9. Math</a> |
| <ul class="sectlevel3"> |
| <li><a href="jsobjects.html#static-attributes-1">17.9.1. Static Attributes</a></li> |
| </ul> |
| </li> |
| <li><a href="jsobjects.html#_regexp">17.10. RegExp</a></li> |
| <li><a href="jsobjects.html#_json">17.11. JSON</a></li> |
| </ul> |
| </li> |
| <li><a href="n4js_objects.html#_n4js-objects">18. N4JS Objects</a> |
| <ul class="sectlevel2"> |
| <li><a href="n4js_objects.html#_reflection-model">18.1. Reflection Model</a></li> |
| <li><a href="n4js_objects.html#_error-types">18.2. Error Types</a> |
| <ul class="sectlevel3"> |
| <li><a href="n4js_objects.html#_n4apinotimplemented">18.2.1. N4ApiNotImplemented</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="appendix_a_acronyms.html#_acronyms">Appendix A: Acronyms</a></li> |
| <li><a href="appendix_b_license.html#sec:License">Appendix B: License</a></li> |
| <li><a href="appendix_c_bibliography.html#_bibliography">Appendix C: Bibliography</a></li> |
| </ul> |
| </div> |
| </div> |
| <div id="content"><div class="sect1"> |
| <h2 id="_grammars"><a class="anchor" href="#_grammars"></a><a class="link" href="#_grammars">16. Grammars</a></h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>N4JS extends the ECMAScript 2015 language grammar and combines it with type expression.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title=""></i> |
| </td> |
| <td class="content"> |
| These grammars are slightly simplified versions of the "real" Xtext grammars used in the implementation. |
| These grammars are post-processed and combined with additional validators so not all constructs are necessarily available in N4JS. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="sect2"> |
| <h3 id="_type-expressions-grammar"><a class="anchor" href="#_type-expressions-grammar"></a><a class="link" href="#_type-expressions-grammar">16.1. Type Expressions Grammar</a></h3> |
| <div id="lst:EBNFTypeExpression" class="listingblock"> |
| <div class="title">EBNF Type Expression Grammar</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xtext" data-lang="xtext">TypeRef: |
| TypeRefWithoutModifiers =>undefModifier=UndefModifierToken? |
| | undefModifier=UndefModifierToken; |
| |
| TypeRefWithoutModifiers: |
| ((ParameterizedTypeRef | ThisTypeRef) => dynamic?='+'?) |
| | ConstructorTypeRef |
| | ClassifierTypeRef |
| | FunctionTypeExpression |
| | UnionTypeExpression |
| | IntersectionTypeExpression; |
| |
| TypeRefFunctionTypeExpression: |
| ParameterizedTypeRef |
| | ConstructorTypeRef |
| | ClassifierTypeRef |
| | UnionTypeExpression |
| | IntersectionTypeExpression |
| ; |
| |
| TypeRefForCast: |
| ParameterizedTypeRef |
| | ThisTypeRef |
| | ConstructorTypeRef |
| | ClassifierTypeRef |
| | FunctionTypeExpression; |
| |
| TypeRefInClassifierType: |
| ParameterizedTypeRefNominal |
| | ThisTypeRefNominal; |
| |
| |
| ThisTypeRef: |
| ThisTypeRefNominal | ThisTypeRefStructural; |
| |
| ThisTypeRefNominal: |
| 'this'; |
| |
| ThisTypeRefStructural: |
| definedTypingStrategy=TypingStrategyUseSiteOperator |
| 'this' |
| ('with' TStructMemberList)?; |
| |
| FunctionTypeExpression: |
| '{' |
| ('@' 'This' '(' declaredThisType=TypeRefFunctionTypeExpression ')')? |
| 'function' |
| ('<' ownedTypeVars+=TypeVariable (',' ownedTypeVars+=TypeVariable)* '>')? |
| '(' TAnonymousFormalParameterList ')' |
| (':' returnTypeRef=TypeRef)? |
| '}'; |
| |
| fragment TAnonymousFormalParameterList*: |
| (fpars+=TAnonymousFormalParameter (',' fpars+=TAnonymousFormalParameter)*)? |
| ; |
| |
| TAnonymousFormalParameter: |
| variadic?='...'? (=> name=TIdentifier ':')? typeRef=TypeRef |
| ; |
| |
| UnionTypeExpression: |
| 'union' '{' typeRefs+=TypeRefWithoutModifiers (',' typeRefs+=TypeRefWithoutModifiers)* '}'; |
| |
| IntersectionTypeExpression: |
| 'intersection' '{' typeRefs+=TypeRefWithoutModifiers (',' typeRefs+=TypeRefWithoutModifiers)* '}'; |
| |
| ParameterizedTypeRef: |
| ParameterizedTypeRefNominal | ParameterizedTypeRefStructural; |
| |
| ParameterizedTypeRefStructural: |
| definedTypingStrategy=TypingStrategyUseSiteOperator |
| declaredType=[Type|TypeReferenceName] |
| (=>'<' typeArgs+=TypeArgument (',' typeArgs+=TypeArgument)* '>')? |
| ('with' TStructMemberList)?; |
| |
| fragment TStructMemberList*: '{' (astStructuralMembers+=TStructMember (';'|',')?)* '}'; |
| |
| TStructMember: |
| TStructGetter |
| | TStructSetter |
| | TStructMethod |
| | TStructField; |
| |
| TStructMethod: |
| => |
| (('<' typeVars+=TypeVariable (',' typeVars+=TypeVariable)* '>')? |
| name=TypesIdentifier '(' |
| ) TAnonymousFormalParameterList ')' |
| (':' returnTypeRef=TypeRef)? |
| ; |
| |
| TStructField: |
| name=TypesIdentifier (':' typeRef=TypeRef)? |
| ; |
| |
| TStructGetter: |
| => ('get' |
| name=TypesIdentifier) |
| '(' ')' (':' declaredTypeRef=TypeRef)? |
| ; |
| |
| TStructSetter: |
| => ('set' |
| name=TypesIdentifier) |
| '(' fpar=TAnonymousFormalParameter ')' |
| ; |
| |
| ParameterizedTypeRefNominal: |
| declaredType=[Type|TypeReferenceName] |
| (=> '<' typeArgs+=TypeArgument (',' typeArgs+=TypeArgument)* '>')?; |
| |
| TypingStrategyUseSiteOperator: |
| '~' ('~' | STRUCTMODSUFFIX)?; |
| |
| TypingStrategyDefSiteOperator: |
| '~'; |
| |
| terminal STRUCTMODSUFFIX: |
| ('r' | 'i' | 'w') '~' |
| ; |
| |
| ConstructorTypeRef: |
| 'constructor' '{' staticTypeRef=TypeRefInClassifierType '}'; |
| |
| ClassifierTypeRef: |
| 'type' '{' staticTypeRef=TypeRefInClassifierType '}'; |
| |
| TypeReferenceName: |
| IDENTIFIER ('.' IDENTIFIER)*; |
| |
| TypeArgument: |
| Wildcard | TypeRef; |
| |
| Wildcard: |
| => ('?') (('extends' declaredUpperBound=TypeRef) | ('super' |
| declaredLowerBound=TypeRef))?; |
| |
| UndefModifierToken: |
| '?'; |
| |
| TypeVariable: |
| name=IDENTIFIER ('extends' declaredUpperBounds+=ParameterizedTypeRef ('&' |
| declaredUpperBounds+=ParameterizedTypeRef)*)?; |
| |
| TypesIdentifier: |
| IDENTIFIER |
| | 'get' | 'set' | 'abstract' | 'project' |
| | 'union' | 'intersection' |
| | 'as' | 'from' | 'type' | 'void' | 'null'; |
| |
| TIdentifier: |
| TypesIdentifier |
| | 'implements' | 'interface' |
| | 'private' | 'protected' | 'public' |
| | 'static' |
| ; |
| |
| terminal IDENTIFIER: |
| IDENTIFIER_START IDENTIFIER_PART*; |
| |
| terminal INT: |
| DECIMAL_INTEGER_LITERAL_FRAGMENT; |
| |
| terminal ML_COMMENT: |
| ML_COMMENT_FRAGMENT; |
| |
| terminal SL_COMMENT: |
| '//' (!LINE_TERMINATOR_FRAGMENT)*; |
| |
| terminal EOL: |
| LINE_TERMINATOR_SEQUENCE_FRAGMENT; |
| |
| terminal WS: |
| WHITESPACE_FRAGMENT+; |
| |
| terminal fragment UNICODE_ESCAPE_FRAGMENT: |
| '\\' ('u' ( |
| HEX_DIGIT (HEX_DIGIT (HEX_DIGIT HEX_DIGIT?)?)? |
| | '{' HEX_DIGIT* '}'? |
| )?)?; |
| |
| terminal fragment IDENTIFIER_START: |
| UNICODE_LETTER_FRAGMENT |
| | '$' |
| | '_' |
| | UNICODE_ESCAPE_FRAGMENT; |
| |
| terminal fragment IDENTIFIER_PART: |
| UNICODE_LETTER_FRAGMENT |
| | UNICODE_ESCAPE_FRAGMENT |
| | '$' |
| | UNICODE_COMBINING_MARK_FRAGMENT |
| | UNICODE_DIGIT_FRAGMENT |
| | UNICODE_CONNECTOR_PUNCTUATION_FRAGMENT |
| | ZWNJ |
| | ZWJ; |
| |
| terminal DOT_DOT: |
| '..' |
| ;</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_n4js-language-grammar"><a class="anchor" href="#_n4js-language-grammar"></a><a class="link" href="#_n4js-language-grammar">16.2. N4JS Language Grammar</a></h3> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xtext" data-lang="xtext">Script: annotations+=ScriptAnnotation* |
| scriptElements+=ScriptElement*; |
| |
| ScriptElement: |
| AnnotatedScriptElement |
| | N4ClassDeclaration<Yield=false> |
| | N4InterfaceDeclaration<Yield=false> |
| | N4EnumDeclaration<Yield=false> |
| | ImportDeclaration |
| | ExportDeclaration |
| | RootStatement<Yield=false> |
| ; |
| |
| AnnotatedScriptElement: |
| AnnotationList ( |
| {ExportDeclaration.annotationList=current} ExportDeclarationImpl |
| | {ImportDeclaration.annotationList=current} ImportDeclarationImpl |
| | {FunctionDeclaration.annotationList=current} |
| =>((declaredModifiers+=N4Modifier)* AsyncNoTrailingLineBreak |
| ->FunctionImpl<Yield=false,YieldIfGenerator=false,Expression=false>) |
| | ( |
| ( |
| {N4ClassDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* |
| 'class' typingStrategy=TypingStrategyDefSiteOperator? |
| name=BindingIdentifier<Yield=false> |
| TypeVariables? |
| ClassExtendsClause<Yield=false>? |
| | {N4InterfaceDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* |
| 'interface' typingStrategy=TypingStrategyDefSiteOperator? name=BindingIdentifier<Yield=false> |
| TypeVariables? |
| InterfaceImplementsList? |
| ) |
| Members<Yield=false> |
| ) |
| | {N4EnumDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* |
| 'enum' name=BindingIdentifier<Yield=false> |
| '{' |
| literals+=N4EnumLiteral (',' literals+= N4EnumLiteral)* |
| '}' |
| ) |
| ; |
| |
| fragment TypeVariables*: |
| '<' typeVars+=TypeVariable (',' typeVars+=TypeVariable)* '>' |
| ; |
| |
| ExportDeclaration: |
| ExportDeclarationImpl |
| ; |
| |
| fragment ExportDeclarationImpl*: |
| 'export' ( |
| wildcardExport?='*' ExportFromClause Semi |
| | ExportClause ->ExportFromClause? Semi |
| | exportedElement=ExportableElement |
| | defaultExport?='default' (->exportedElement=ExportableElement | defaultExportedExpression=AssignmentExpression<In=true,Yield=false> Semi) |
| ) |
| ; |
| |
| fragment ExportFromClause*: |
| 'from' reexportedFrom=[types::TModule|ModuleSpecifier] |
| ; |
| |
| fragment ExportClause*: |
| '{' |
| (namedExports+=ExportSpecifier (',' namedExports+=ExportSpecifier)* ','?)? |
| '}' |
| ; |
| |
| ExportSpecifier: |
| element=IdentifierRef<Yield=false> ('as' alias=IdentifierName)? |
| ; |
| |
| ExportableElement: |
| AnnotatedExportableElement<Yield=false> |
| | N4ClassDeclaration<Yield=false> |
| | N4InterfaceDeclaration<Yield=false> |
| | N4EnumDeclaration<Yield=false> |
| | ExportedFunctionDeclaration<Yield=false> |
| | ExportedVariableStatement |
| ; |
| |
| AnnotatedExportableElement <Yield>: |
| AnnotationList ( |
| {FunctionDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* AsyncNoTrailingLineBreak |
| FunctionImpl<Yield, Yield, Expression=false> |
| | {ExportedVariableStatement.annotationList=current} |
| (declaredModifiers+=N4Modifier)* |
| varStmtKeyword=VariableStatementKeyword |
| varDeclsOrBindings+=ExportedVariableDeclarationOrBinding<Yield> ( ',' varDeclsOrBindings+=ExportedVariableDeclarationOrBinding<Yield> )* Semi |
| | ( |
| ( |
| {N4ClassDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* |
| 'class' typingStrategy=TypingStrategyDefSiteOperator? |
| name=BindingIdentifier<Yield> |
| TypeVariables? |
| ClassExtendsClause<Yield>? |
| | {N4InterfaceDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* |
| ('interface') typingStrategy=TypingStrategyDefSiteOperator? name=BindingIdentifier<Yield> |
| TypeVariables? |
| InterfaceImplementsList? |
| ) |
| Members<Yield> |
| ) |
| | {N4EnumDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* |
| 'enum' name=BindingIdentifier<Yield> |
| '{' |
| literals+=N4EnumLiteral (',' literals+= N4EnumLiteral)* |
| '}' |
| ) |
| ; |
| |
| ImportDeclaration: |
| ImportDeclarationImpl |
| ; |
| |
| fragment ImportDeclarationImpl*: |
| 'import' ( |
| ImportClause importFrom?='from' |
| )? module=[types::TModule|ModuleSpecifier] Semi |
| ; |
| |
| fragment ImportClause*: |
| importSpecifiers+=DefaultImportSpecifier (',' ImportSpecifiersExceptDefault)? |
| | ImportSpecifiersExceptDefault |
| ; |
| |
| fragment ImportSpecifiersExceptDefault*: |
| importSpecifiers+=NamespaceImportSpecifier |
| | '{' (importSpecifiers+=NamedImportSpecifier (',' importSpecifiers+=NamedImportSpecifier)* ','?)? '}' |
| ; |
| |
| NamedImportSpecifier: |
| importedElement=[types::TExportableElement|BindingIdentifier<Yield=false>] |
| | importedElement=[types::TExportableElement|IdentifierName] 'as' alias=BindingIdentifier<Yield=false> |
| ; |
| |
| DefaultImportSpecifier: |
| importedElement=[types::TExportableElement|BindingIdentifier<Yield=false>] |
| ; |
| |
| NamespaceImportSpecifier: '*' 'as' alias=BindingIdentifier<false> (declaredDynamic?='+')?; |
| |
| ModuleSpecifier: STRING; |
| |
| FunctionDeclaration <Yield>: |
| => ((declaredModifiers+=N4Modifier)* AsyncNoTrailingLineBreak |
| -> FunctionImpl <Yield,Yield,Expression=false> |
| ) => Semi? |
| ; |
| |
| fragment AsyncNoTrailingLineBreak *: (declaredAsync?='async' NoLineTerminator)?; |
| |
| fragment FunctionImpl<Yield, YieldIfGenerator, Expression>*: |
| 'function' |
| ( |
| generator?='*' FunctionHeader<YieldIfGenerator,Generator=true> FunctionBody<Yield=true,Expression> |
| | FunctionHeader<Yield,Generator=false> FunctionBody<Yield=false,Expression> |
| ) |
| ; |
| |
| fragment FunctionHeader<Yield, Generator>*: |
| TypeVariables? |
| name=BindingIdentifier<Yield>? |
| StrictFormalParameters<Yield=Generator> |
| (-> ':' returnTypeRef=TypeRef)? |
| ; |
| |
| fragment FunctionBody <Yield, Expression>*: |
| <Expression> body=Block<Yield> |
| | <!Expression> body=Block<Yield>? |
| ; |
| |
| ExportedFunctionDeclaration<Yield>: |
| FunctionDeclaration<Yield> |
| ; |
| |
| FunctionTypeExpression: |
| {types::FunctionTypeExpression} |
| '{' |
| ('@' 'This' '(' declaredThisType=TypeRefFunctionTypeExpression ')')? |
| 'function' |
| ('<' ownedTypeVars+=TypeVariable (',' ownedTypeVars+=TypeVariable)* '>')? |
| '(' |
| (fpars+=TAnonymousFormalParameter (',' fpars+=TAnonymousFormalParameter)*)? |
| ')' |
| (':' returnTypeRef=TypeRef)? |
| '}'; |
| |
| AnnotatedFunctionDeclaration <Yield, Default>: |
| annotationList=AnnotationList |
| (declaredModifiers+=N4Modifier)* AsyncNoTrailingLineBreak |
| FunctionImpl<Yield,Yield,Expression=false> |
| ; |
| |
| |
| FunctionExpression: |
| (FunctionImpl<Yield=false,YieldIfGenerator=true,Expression=true> |
| ) |
| ; |
| |
| AsyncFunctionExpression: |
| =>(declaredAsync?='async' NoLineTerminator 'function') |
| FunctionHeader<Yield=false,Generator=false> FunctionBody<Yield=false,Expression=true> |
| ; |
| |
| ArrowExpression <In, Yield>: |
| => ( |
| ( |
| '(' (fpars+=FormalParameter<Yield> |
| (',' fpars+=FormalParameter<Yield>)*)? |
| ')' (':' returnTypeRef=TypeRef)? |
| | =>(declaredAsync?='async' NoLineTerminator '(') |
| (fpars+=FormalParameter<Yield> (',' fpars+=FormalParameter<Yield>)*)? |
| ')' (':' returnTypeRef=TypeRef)? |
| | fpars+=BindingIdentifierAsFormalParameter<Yield> |
| ) |
| '=>' |
| ) |
| (-> hasBracesAroundBody?='{' body=BlockMinusBraces<Yield> '}' |
| | body=ExpressionDisguisedAsBlock<In>) |
| ; |
| |
| fragment StrictFormalParameters <Yield>*: |
| '(' (fpars+=FormalParameter<Yield> (',' fpars+=FormalParameter<Yield>)*)? ')' |
| ; |
| |
| BindingIdentifierAsFormalParameter <Yield>: name=BindingIdentifier<Yield>; |
| |
| BlockMinusBraces <Yield>: statements+=Statement<Yield>*; |
| |
| ExpressionDisguisedAsBlock <In>: |
| statements+=AssignmentExpressionStatement<In> |
| ; |
| |
| AssignmentExpressionStatement <In>: expression=AssignmentExpression<In,Yield=false>; |
| |
| AnnotatedExpression <Yield>: |
| ExpressionAnnotationList ( |
| {N4ClassExpression.annotationList=current} |
| 'class' name=BindingIdentifier<Yield>? |
| ClassExtendsClause<Yield>? |
| Members<Yield> |
| | {FunctionExpression.annotationList=current} AsyncNoTrailingLineBreak |
| FunctionImpl<Yield=false,YieldIfGenerator=true,Expression=true> |
| ) |
| ; |
| |
| TypeVariable: |
| name=IdentifierOrThis |
| ( 'extends' declaredUpperBounds+=ParameterizedTypeRefNominal |
| ('&' declaredUpperBounds+=ParameterizedTypeRefNominal)* |
| )? |
| ; |
| |
| FormalParameter <Yield>: |
| BindingElementFragment<Yield> |
| ; |
| |
| fragment BindingElementFragment <Yield>*: |
| (=> bindingPattern=BindingPattern<Yield> |
| | annotations+=Annotation* |
| ( |
| variadic?='...'? name=BindingIdentifier<Yield> ColonSepTypeRef? |
| ) |
| ) |
| ('=' initializer=AssignmentExpression<In=true, Yield>)? |
| ; |
| |
| fragment ColonSepTypeRef*: |
| ':' declaredTypeRef=TypeRef |
| ; |
| |
| Block <Yield>: => ('{') statements+=Statement<Yield>* '}'; |
| RootStatement <Yield>: |
| Block<Yield> |
| | FunctionDeclaration<Yield> |
| | VariableStatement<In=true,Yield> |
| | EmptyStatement |
| | LabelledStatement<Yield> |
| | ExpressionStatement<Yield> |
| | IfStatement<Yield> |
| | IterationStatement<Yield> |
| | ContinueStatement<Yield> |
| | BreakStatement<Yield> |
| | ReturnStatement<Yield> |
| | WithStatement<Yield> |
| | SwitchStatement<Yield> |
| | ThrowStatement<Yield> |
| | TryStatement<Yield> |
| | DebuggerStatement |
| ; |
| |
| Statement <Yield>: |
| AnnotatedFunctionDeclaration<Yield,Default=false> |
| | RootStatement<Yield> |
| ; |
| |
| enum VariableStatementKeyword: |
| var='var' | const='const' | let='let' |
| ; |
| |
| VariableStatement <In, Yield>: |
| =>(varStmtKeyword=VariableStatementKeyword |
| ) |
| varDeclsOrBindings+=VariableDeclarationOrBinding<In,Yield,false> |
| (',' varDeclsOrBindings+=VariableDeclarationOrBinding<In,Yield,false>)* Semi |
| ; |
| |
| ExportedVariableStatement: |
| (declaredModifiers+=N4Modifier)* |
| varStmtKeyword=VariableStatementKeyword |
| varDeclsOrBindings+=ExportedVariableDeclarationOrBinding<Yield=false> |
| (',' varDeclsOrBindings+=ExportedVariableDeclarationOrBinding<Yield=false>)* Semi |
| ; |
| |
| VariableDeclarationOrBinding <In, Yield, OptionalInit>: |
| VariableBinding<In,Yield,OptionalInit> |
| | VariableDeclaration<In,Yield,true> |
| ; |
| |
| VariableBinding <In, Yield, OptionalInit>: |
| => pattern=BindingPattern<Yield> ( |
| <OptionalInit> ('=' expression=AssignmentExpression<In,Yield>)? |
| | <!OptionalInit> '=' expression=AssignmentExpression<In,Yield> |
| ) |
| ; |
| |
| VariableDeclaration <In, Yield, AllowType>: |
| VariableDeclarationImpl<In,Yield,AllowType>; |
| |
| fragment VariableDeclarationImpl <In, Yield, AllowType>*: |
| annotations+=Annotation* |
| ( |
| <AllowType> =>( |
| name=BindingIdentifier<Yield> ColonSepTypeRef? |
| ) ('=' expression=AssignmentExpression<In,Yield>)? |
| | <!AllowType> =>( |
| name=BindingIdentifier<Yield> |
| ) ('=' expression=AssignmentExpression<In,Yield>)? |
| ) |
| ; |
| |
| ExportedVariableDeclarationOrBinding <Yield>: |
| ExportedVariableBinding<Yield> |
| | ExportedVariableDeclaration<Yield> |
| ; |
| |
| ExportedVariableBinding <Yield>: |
| => pattern=BindingPattern<Yield> '=' expression=AssignmentExpression<In=true,Yield> |
| ; |
| |
| ExportedVariableDeclaration <Yield>: |
| VariableDeclarationImpl<In=true,Yield,AllowType=true> |
| ; |
| EmptyStatement: ';'; |
| ExpressionStatement <Yield>: expression=Expression<In=true,Yield> Semi; |
| |
| IfStatement <Yield>: 'if' '(' expression=Expression<In=true,Yield> ')' |
| ifStmt=Statement<Yield> (=> 'else' elseStmt=Statement<Yield>)?; |
| |
| IterationStatement <Yield>: |
| DoStatement<Yield> |
| | WhileStatement<Yield> |
| | ForStatement<Yield> |
| ; |
| |
| DoStatement <Yield>: 'do' statement=Statement<Yield> 'while' |
| '(' expression=Expression<In=true,Yield> ')' => Semi?; |
| WhileStatement <Yield>: 'while' '(' expression=Expression<In=true,Yield> ')' |
| statement=Statement<Yield>; |
| |
| ForStatement <Yield>: |
| 'for' '(' |
| ( |
| =>(initExpr=LetIdentifierRef forIn?='in' expression=Expression<In=true,Yield> ')') |
| | ( ->varStmtKeyword=VariableStatementKeyword |
| ( |
| =>(varDeclsOrBindings+=BindingIdentifierAsVariableDeclaration<In=false,Yield> |
| (forIn?='in' | forOf?='of') ->expression=AssignmentExpression<In=true,Yield>?) |
| | varDeclsOrBindings+=VariableDeclarationOrBinding<In=false,Yield,OptionalInit=true> |
| ( |
| (',' varDeclsOrBindings+=VariableDeclarationOrBinding<In=false,Yield,false>)* ';' |
| expression=Expression<In=true,Yield>? ';' updateExpr=Expression<In=true,Yield>? |
| | forIn?='in' expression=Expression<In=true,Yield>? |
| | forOf?='of' expression=AssignmentExpression<In=true,Yield>? |
| ) |
| ) |
| | initExpr=Expression<In=false,Yield> |
| ( |
| ';' expression=Expression<In=true,Yield>? ';' updateExpr=Expression<In=true,Yield>? |
| | forIn?='in' expression=Expression<In=true,Yield>? |
| | forOf?='of' expression=AssignmentExpression<In=true,Yield>? |
| ) |
| | ';' expression=Expression<In=true,Yield>? ';' updateExpr=Expression<In=true,Yield>? |
| ) |
| ')' |
| ) statement=Statement<Yield> |
| ; |
| |
| LetIdentifierRef: |
| id=[types::IdentifiableElement|LetAsIdentifier] |
| ; |
| |
| LetAsIdentifier: 'let'; |
| |
| BindingIdentifierAsVariableDeclaration <In, Yield>: |
| name=BindingIdentifier<Yield> |
| ; |
| |
| ContinueStatement <Yield>: 'continue' (label=[LabelledStatement|BindingIdentifier<Yield>])? Semi; |
| |
| BreakStatement <Yield>: 'break' (label=[LabelledStatement|BindingIdentifier<Yield>])? Semi; |
| |
| ReturnStatement <Yield>: 'return' (expression=Expression<In=true,Yield>)? Semi; |
| |
| WithStatement <Yield>: 'with' '(' expression=Expression<In=true,Yield> ')' statement=Statement<Yield>; |
| |
| SwitchStatement <Yield>: |
| 'switch' '(' expression=Expression<In=true,Yield> ')' '{' |
| (cases+=CaseClause<Yield>)* |
| ((cases+=DefaultClause<Yield>) |
| (cases+=CaseClause<Yield>)*)? '}' |
| ; |
| |
| CaseClause <Yield>: 'case' expression=Expression<In=true,Yield> ':' (statements+=Statement<Yield>)*; |
| |
| DefaultClause <Yield>: 'default' ':' (statements+=Statement<Yield>)*; |
| |
| LabelledStatement <Yield>: => (name=BindingIdentifier<Yield> ':') statement=Statement<Yield>; |
| |
| ThrowStatement <Yield>: |
| 'throw' expression=Expression<In=true,Yield> Semi; |
| |
| TryStatement <Yield>: |
| 'try' block=Block<Yield> |
| ((catch=CatchBlock<Yield> finally=FinallyBlock<Yield>?) | finally=FinallyBlock<Yield>) |
| ; |
| |
| CatchBlock <Yield>: 'catch' '(' catchVariable=CatchVariable<Yield> ')' block=Block<Yield>; |
| |
| CatchVariable <Yield>: |
| =>bindingPattern=BindingPattern<Yield> |
| | =>(name=BindingIdentifier<Yield> -> ColonSepTypeRef) |
| | name=BindingIdentifier<Yield> |
| ; |
| |
| FinallyBlock <Yield>: 'finally' block=Block<Yield>; |
| |
| DebuggerStatement: |
| 'debugger' Semi; |
| |
| PrimaryExpression <Yield>: |
| ThisLiteral |
| | SuperLiteral |
| | IdentifierRef<Yield> |
| | ParameterizedCallExpression<Yield> |
| | Literal |
| | ArrayLiteral<Yield> |
| | ObjectLiteral<Yield> |
| | ParenExpression<Yield> |
| | AnnotatedExpression<Yield> |
| | FunctionExpression |
| | AsyncFunctionExpression |
| | N4ClassExpression<Yield> |
| | TemplateLiteral<Yield> |
| ; |
| |
| ParenExpression <Yield>: '(' expression=Expression<In=true,Yield> ')'; |
| |
| IdentifierRef <Yield>: |
| id=[types::IdentifiableElement|BindingIdentifier<Yield>] |
| ; |
| |
| SuperLiteral: 'super'; |
| |
| ThisLiteral: 'this'; |
| |
| ArrayLiteral <Yield>: |
| '[' |
| elements+=ArrayPadding* ( |
| elements+=ArrayElement<Yield> |
| (',' elements+=ArrayPadding* elements+=ArrayElement<Yield>)* |
| (trailingComma?=',' elements+=ArrayPadding*)? |
| )? |
| ']' |
| ; |
| |
| ArrayPadding: ','; |
| |
| ArrayElement <Yield>: spread?='...'? expression=AssignmentExpression<In=true,Yield>; |
| |
| ObjectLiteral <Yield>: '{' |
| ( propertyAssignments+=PropertyAssignment<Yield> |
| (',' propertyAssignments+=PropertyAssignment<Yield>)* ','? |
| )? |
| '}' |
| ; |
| |
| PropertyAssignment <Yield>: |
| AnnotatedPropertyAssignment<Yield> |
| | PropertyNameValuePair<Yield> |
| | PropertyGetterDeclaration<Yield> |
| | PropertySetterDeclaration<Yield> |
| | PropertyMethodDeclaration<Yield> |
| | PropertyNameValuePairSingleName<Yield> |
| ; |
| |
| AnnotatedPropertyAssignment <Yield>: |
| PropertyAssignmentAnnotationList ( |
| =>( {PropertyNameValuePair.annotationList=current} declaredTypeRef=TypeRef? |
| LiteralOrComputedPropertyName<Yield> ':' |
| ) expression=AssignmentExpression<In=true,Yield> |
| | =>({PropertyGetterDeclaration.annotationList=current} |
| GetterHeader<Yield> |
| ) body=Block<Yield=false> |
| | =>({PropertySetterDeclaration.annotationList=current} |
| 'set' ->LiteralOrComputedPropertyName <Yield> |
| ) '(' fpar=FormalParameter<Yield> ')' body=Block<Yield=false> |
| | =>({PropertyMethodDeclaration.annotationList=current} |
| TypeVariables? returnTypeRef=TypeRef? |
| (generator?='*' LiteralOrComputedPropertyName<Yield> ->MethodParamsAndBody <Generator=true> |
| | LiteralOrComputedPropertyName<Yield> -> MethodParamsAndBody <Generator=false> |
| ) |
| ) ';'? |
| | {PropertyNameValuePairSingleName.annotationList=current} |
| declaredTypeRef=TypeRef? identifierRef=IdentifierRef<Yield> |
| ( '=' expression=AssignmentExpression<In=true,Yield>)?) |
| ; |
| |
| PropertyMethodDeclaration <Yield>: |
| => (TypeVariables? returnTypeRef=TypeRef? |
| ( |
| generator?='*' LiteralOrComputedPropertyName<Yield> |
| ->MethodParamsAndBody<Generator=true> |
| | LiteralOrComputedPropertyName<Yield> ->MethodParamsAndBody <Generator=false> |
| ) |
| ) |
| ';'? |
| ; |
| |
| PropertyNameValuePair <Yield>: |
| => ( |
| declaredTypeRef=TypeRef? LiteralOrComputedPropertyName<Yield> ':' |
| ) |
| expression=AssignmentExpression<In=true,Yield> |
| ; |
| |
| PropertyNameValuePairSingleName <Yield>: |
| declaredTypeRef=TypeRef? |
| identifierRef=IdentifierRef<Yield> |
| ('=' expression=AssignmentExpression<In=true,Yield>)? |
| ; |
| |
| PropertyGetterDeclaration <Yield>: |
| =>( |
| GetterHeader<Yield> |
| ) |
| body=Block<Yield=false> |
| ; |
| |
| PropertySetterDeclaration <Yield>: |
| =>( |
| 'set' |
| ->LiteralOrComputedPropertyName <Yield> |
| ) |
| '(' fpar=FormalParameter<Yield> ')' body=Block<Yield=false> |
| ; |
| |
| ParameterizedCallExpression <Yield>: |
| TypeArguments |
| target=IdentifierRef<Yield> |
| ArgumentsWithParentheses<Yield> |
| ; |
| |
| LeftHandSideExpression <Yield>: |
| MemberExpression<Yield> ( |
| {ParameterizedCallExpression.target=current} ArgumentsWithParentheses<Yield> |
| ( |
| {ParameterizedCallExpression.target=current} ArgumentsWithParentheses<Yield> |
| | {IndexedAccessExpression.target=current} IndexedAccessExpressionTail<Yield> |
| | {ParameterizedPropertyAccessExpression.target=current} |
| ParameterizedPropertyAccessExpressionTail<Yield> |
| | ->({TaggedTemplateString.target=current} template=TemplateLiteral<Yield>) |
| )* |
| )? |
| ; |
| |
| fragment Arguments <Yield>*: |
| arguments+=AssignmentExpression<In=true,Yield> |
| (',' arguments+=AssignmentExpression<In=true,Yield>)* |
| (',' spread?='...' arguments+=AssignmentExpression<In=true,Yield>)? |
| | spread?='...' arguments+=AssignmentExpression<In=true,Yield> |
| ; |
| |
| fragment TypeArguments*: |
| '<' typeArgs+=TypeRef (',' typeArgs+=TypeRef)* '>' |
| ; |
| |
| fragment ArgumentsWithParentheses <Yield>*: |
| '(' Arguments<Yield>? ')' |
| ; |
| |
| MemberExpression <Yield>: |
| =>('new' '.') 'target' |
| | => ('new') callee=MemberExpression<Yield> (-> TypeArguments)? |
| (=> withArgs?='(' Arguments<Yield>? ')' |
| ( |
| {IndexedAccessExpression.target=current} IndexedAccessExpressionTail<Yield> |
| | {ParameterizedPropertyAccessExpression.target=current} |
| ParameterizedPropertyAccessExpressionTail<Yield> |
| | {TaggedTemplateString.target=current} template=TemplateLiteral<Yield> |
| )* |
| )? |
| | PrimaryExpression<Yield> ( |
| {IndexedAccessExpression.target=current} IndexedAccessExpressionTail<Yield> |
| | {ParameterizedPropertyAccessExpression.target=current} |
| ParameterizedPropertyAccessExpressionTail<Yield> |
| | {TaggedTemplateString.target=current} template=TemplateLiteral<Yield> |
| )* |
| ; |
| |
| fragment IndexedAccessExpressionTail <Yield>*: |
| '[' index=Expression<In=true,Yield> ']' |
| ; |
| |
| fragment ParameterizedPropertyAccessExpressionTail <Yield>*: |
| '.' TypeArguments? property=[types::IdentifiableElement|IdentifierName] |
| ; |
| |
| PostfixExpression <Yield>: |
| LeftHandSideExpression<Yield> ( |
| =>({PostfixExpression.expression=current} op=PostfixOperator |
| ) |
| )? |
| ; |
| |
| enum PostfixOperator: inc='++' | dec='--'; |
| |
| CastExpression <Yield>: PostfixExpression<Yield> |
| (=>({CastExpression.expression=current} 'as') targetTypeRef=TypeRefForCast)?; |
| |
| UnaryExpression <Yield>: |
| CastExpression<Yield> |
| | (op=UnaryOperator expression=UnaryExpression<Yield>); |
| |
| enum UnaryOperator: delete | void | typeof | inc='++' | dec='--' | pos='+' | neg='-' | inv='~' | not='!'; |
| |
| MultiplicativeExpression <Yield>: UnaryExpression<Yield> |
| (=>({MultiplicativeExpression.lhs=current} op=MultiplicativeOperator) |
| rhs=UnaryExpression<Yield>)*; |
| |
| enum MultiplicativeOperator: times='*' | div='/' | mod='%'; |
| |
| AdditiveExpression <Yield>: MultiplicativeExpression<Yield> |
| (=>({AdditiveExpression.lhs=current} op=AdditiveOperator) |
| rhs=MultiplicativeExpression<Yield>)*; |
| |
| enum AdditiveOperator: add='+' | sub='-'; |
| |
| ShiftExpression <Yield>: AdditiveExpression<Yield> |
| (=>({ShiftExpression.lhs=current} op=ShiftOperator rhs=AdditiveExpression<Yield>))* |
| ; |
| |
| ShiftOperator: |
| '>' '>' '>'? |
| | '<<' |
| ; |
| |
| RelationalExpression <In, Yield>: ShiftExpression<Yield> |
| =>({RelationalExpression.lhs=current} op=RelationalOperator<In> |
| ->rhs=ShiftExpression<Yield>)*; |
| |
| RelationalOperator <In>: |
| '<' | '>' | '<=' | '>=' | 'instanceof' | <In> 'in'; |
| |
| EqualityExpression <In, Yield>: RelationalExpression<In,Yield> |
| (=>({EqualityExpression.lhs=current} op=EqualityOperator) rhs=RelationalExpression<In,Yield>)*; |
| |
| enum EqualityOperator: same='===' | nsame='!==' | eq='==' | neq='!='; |
| |
| BitwiseANDExpression <In, Yield>: EqualityExpression<In,Yield> |
| (=>({BinaryBitwiseExpression.lhs=current} op=BitwiseANDOperator) rhs=EqualityExpression<In,Yield>)*; |
| |
| BitwiseANDOperator: '&'; |
| |
| BitwiseXORExpression <In, Yield>: BitwiseANDExpression<In,Yield> |
| (=>({BinaryBitwiseExpression.lhs=current} op=BitwiseXOROperator) rhs=BitwiseANDExpression<In,Yield>)*; |
| |
| BitwiseXOROperator: '^'; |
| |
| BitwiseORExpression <In, Yield>: BitwiseXORExpression<In,Yield> |
| (=>({BinaryBitwiseExpression.lhs=current} op=BitwiseOROperator) rhs=BitwiseXORExpression<In,Yield>)*; |
| |
| BitwiseOROperator: '|'; |
| |
| LogicalANDExpression <In, Yield>: BitwiseORExpression<In,Yield> |
| (=> ({BinaryLogicalExpression.lhs=current} op=LogicalANDOperator) rhs=BitwiseORExpression<In,Yield>)*; |
| |
| LogicalANDOperator: '&&'; |
| |
| LogicalORExpression <In, Yield>: LogicalANDExpression<In,Yield> |
| (=>({BinaryLogicalExpression.lhs=current} op=LogicalOROperator) rhs=LogicalANDExpression<In,Yield>)*; |
| |
| LogicalOROperator: '||'; |
| |
| ConditionalExpression <In, Yield>: LogicalORExpression<In,Yield> |
| (=> ({ConditionalExpression.expression=current} '?') trueExpression=AssignmentExpression<In=true,Yield> |
| ':' falseExpression=AssignmentExpression<In,Yield>)?; |
| |
| AssignmentExpression <In, Yield>: |
| AwaitExpression<In,Yield> |
| | PromisifyExpression<In,Yield> |
| | ArrowExpression<In,Yield> |
| | <Yield> YieldExpression<In> |
| | ConditionalExpression<In,Yield> |
| (=> ({AssignmentExpression.lhs=current} op=AssignmentOperator) |
| rhs=AssignmentExpression<In,Yield>)? |
| ; |
| |
| YieldExpression <In>: |
| 'yield' => many?='*'? -> expression=AssignmentExpression<In,Yield=true>? |
| ; |
| |
| AssignmentOperator: |
| '=' | '*=' | '/=' | '%=' | '+=' | '-=' |
| | '<<=' |
| | '>' '>'? '>=' |
| | '&=' | '^=' | '|=' |
| ; |
| |
| AwaitExpression <In, Yield>: |
| =>('await') expression=AssignmentExpression<In,Yield>; |
| |
| PromisifyExpression <In, Yield>: |
| => ('@' 'Promisify') expression=AssignmentExpression<In,Yield>; |
| |
| Expression <In, Yield>: |
| AssignmentExpression<In,Yield> ({CommaExpression.exprs+=current} |
| ',' exprs+=AssignmentExpression<In,Yield> |
| (',' exprs+=AssignmentExpression<In,Yield>)*)? |
| ; |
| |
| TemplateLiteral <Yield>: |
| ( |
| segments+=NoSubstitutionTemplate |
| | segments+=TemplateHead segments+=Expression<In=true,Yield>? TemplateExpressionEnd |
| ( |
| segments+=TemplateMiddle segments+=Expression<In=true,Yield>? |
| TemplateExpressionEnd |
| )* |
| segments+=TemplateTail |
| ) |
| ; |
| |
| TemplateExpressionEnd: |
| '}' |
| ; |
| |
| NoSubstitutionTemplate: |
| rawValue=NO_SUBSTITUTION_TEMPLATE_LITERAL |
| ; |
| |
| TemplateHead: |
| rawValue=TEMPLATE_HEAD |
| ; |
| |
| TemplateTail: |
| rawValue=TemplateTailLiteral; |
| |
| TemplateMiddle: |
| rawValue=TemplateMiddleLiteral; |
| |
| Literal: |
| NumericLiteral | BooleanLiteral | StringLiteral |
| | NullLiteral | RegularExpressionLiteral; |
| NullLiteral: 'null'; |
| BooleanLiteral: (true?='true' | 'false'); |
| StringLiteral: value=STRING; |
| NumericLiteral: |
| DoubleLiteral | IntLiteral | BinaryIntLiteral | OctalIntLiteral |
| | LegacyOctalIntLiteral | HexIntLiteral | ScientificIntLiteral; |
| DoubleLiteral: value=DOUBLE; |
| IntLiteral: value=INT; |
| OctalIntLiteral: value=OCTAL_INT; |
| LegacyOctalIntLiteral: value=LEGACY_OCTAL_INT; |
| HexIntLiteral: value=HEX_INT; |
| BinaryIntLiteral: value=BINARY_INT; |
| ScientificIntLiteral: value=SCIENTIFIC_INT; |
| RegularExpressionLiteral: value=REGEX_LITERAL; |
| |
| NumericLiteralAsString: |
| DOUBLE | INT | OCTAL_INT | HEX_INT | SCIENTIFIC_INT |
| ; |
| |
| IdentifierOrThis: |
| IDENTIFIER |
| | 'This' |
| | 'Promisify' |
| | 'target'; |
| |
| AnnotationName: |
| IDENTIFIER |
| | 'This' |
| | 'target'; |
| |
| BindingIdentifier <Yield>: |
| IDENTIFIER |
| | <!Yield> 'yield' |
| | N4Keyword |
| ; |
| |
| IdentifierName: |
| IDENTIFIER | ReservedWord | N4Keyword |
| ; |
| |
| ReservedWord: |
| 'break' | 'case' | 'catch' | 'class' | 'const' | 'continue' | 'debugger' | 'default' | 'delete' |
| | 'do' | 'else' | 'export' | 'extends' | 'finally' | 'for' | 'function' | 'if' | 'import' |
| | 'in' | 'instanceof' | 'new' | 'return' | 'super' | 'switch' | 'this' | 'throw' | 'try' |
| | 'typeof' | 'var' | 'void' | 'while' | 'with' | 'yield' |
| | 'null' |
| | 'true' | 'false' |
| | 'enum'; |
| |
| N4Keyword: |
| 'get' | 'set' |
| | 'let' |
| | 'project' |
| | 'external' | 'abstract' | 'static' |
| | 'as' | 'from' | 'constructor' | 'of' | 'target' |
| | 'type' | 'union' | 'intersection' |
| | 'This' | 'Await' | 'Promisify' |
| | 'await' |
| | 'async' |
| | 'implements' | 'interface' |
| | 'private' | 'protected' | 'public' |
| ; |
| |
| SymbolLiteralComputedName <Yield>: |
| BindingIdentifier<Yield> ('.' IdentifierName)? |
| ; |
| |
| terminal DOUBLE: |
| '.' DECIMAL_DIGIT_FRAGMENT+ EXPONENT_PART? |
| | DECIMAL_INTEGER_LITERAL_FRAGMENT '.' DECIMAL_DIGIT_FRAGMENT* EXPONENT_PART? |
| ; |
| |
| terminal HEX_INT: '0' ('x' | 'X') INT_SUFFIX; |
| |
| terminal BINARY_INT: '0' ('b' | 'B') INT_SUFFIX; |
| |
| terminal OCTAL_INT: '0' ('o' | 'O') INT_SUFFIX; |
| |
| terminal LEGACY_OCTAL_INT: '0' DECIMAL_DIGIT_FRAGMENT INT_SUFFIX; |
| |
| terminal fragment INT_SUFFIX: IDENTIFIER_PART*; |
| |
| terminal SCIENTIFIC_INT: |
| DECIMAL_INTEGER_LITERAL_FRAGMENT EXPONENT_PART |
| ; |
| |
| terminal fragment EXPONENT_PART: |
| ('e' | 'E') SIGNED_INT |
| | IDENTIFIER |
| ; |
| |
| terminal fragment SIGNED_INT: |
| ('+' | '-') DECIMAL_DIGIT_FRAGMENT+ IDENTIFIER? |
| ; |
| |
| terminal STRING: |
| '"' DOUBLE_STRING_CHAR* '"'? |
| | "'" SINGLE_STRING_CHAR* "'"? |
| ; |
| |
| terminal fragment DOUBLE_STRING_CHAR: |
| !(LINE_TERMINATOR_FRAGMENT | '"' | '\\') |
| | '\\' (LINE_TERMINATOR_SEQUENCE_FRAGMENT | !LINE_TERMINATOR_FRAGMENT)? |
| ; |
| |
| terminal fragment SINGLE_STRING_CHAR: |
| !(LINE_TERMINATOR_FRAGMENT | "'" | '\\') |
| | '\\' (LINE_TERMINATOR_SEQUENCE_FRAGMENT | !LINE_TERMINATOR_FRAGMENT)? |
| ; |
| |
| terminal fragment BACKSLASH_SEQUENCE: |
| '\\' !(LINE_TERMINATOR_FRAGMENT)? |
| ; |
| |
| terminal fragment REGEX_CHAR: |
| !(LINE_TERMINATOR_FRAGMENT | '\\' | '/' | '[') |
| | BACKSLASH_SEQUENCE |
| | '[' REGEX_CHAR_OR_BRACKET* ']'? |
| ; |
| |
| terminal fragment REGEX_CHAR_OR_BRACKET: |
| !(LINE_TERMINATOR_FRAGMENT | '\\' | ']') |
| | BACKSLASH_SEQUENCE |
| ; |
| |
| REGEX_LITERAL: |
| ('/' | '/=') REGEX_TAIL? |
| ; |
| |
| terminal fragment ACTUAL_REGEX_TAIL: |
| REGEX_CHAR+ ('/' IDENTIFIER_PART*)? |
| | '/' IDENTIFIER_PART* |
| ; |
| |
| terminal fragment REGEX_START: |
| ('/' | '/=') |
| ; |
| |
| terminal REGEX_TAIL: // post processed |
| '//1' |
| ; |
| terminal TEMPLATE_HEAD: |
| "`" TEMPLATE_LITERAL_CHAR* '$'+ '{' |
| ; |
| |
| terminal NO_SUBSTITUTION_TEMPLATE_LITERAL: |
| '`' TEMPLATE_LITERAL_CHAR* '$'* "`"? |
| ; |
| |
| terminal fragment ACTUAL_TEMPLATE_END: |
| TEMPLATE_LITERAL_CHAR* ('$'+ ('{' | '`'?) | '`'?) |
| ; |
| |
| terminal fragment TEMPLATE_LITERAL_CHAR: |
| !(LINE_TERMINATOR_FRAGMENT | '`' | '\\' | '$') |
| | '$'+ !('{' | '`' | '$') |
| | LINE_TERMINATOR_SEQUENCE_FRAGMENT |
| | '\\' (LINE_TERMINATOR_SEQUENCE_FRAGMENT | !LINE_TERMINATOR_FRAGMENT)? |
| ; |
| |
| TemplateTailLiteral: |
| TEMPLATE_END? |
| ; |
| |
| TemplateMiddleLiteral: |
| TEMPLATE_MIDDLE |
| ; |
| |
| terminal TEMPLATE_MIDDLE: |
| '//2' // will never be lexed |
| ; |
| |
| terminal TEMPLATE_END: |
| '//3' // will never be lexed |
| ; |
| |
| terminal fragment TEMPLATE_CONTINUATION: |
| '//4' // actually '}' |
| ; |
| |
| Semi: ';'; // automatic semicolon instertion, post-processed |
| |
| fragment NoLineTerminator*: NO_LINE_TERMINATOR?; |
| |
| terminal NO_LINE_TERMINATOR: |
| '//5' // post-processed, will never be lexed |
| ; |
| Annotation:'@' AnnotationNoAtSign; |
| ScriptAnnotation: '@@' AnnotationNoAtSign; |
| |
| AnnotationNoAtSign: |
| name=AnnotationName (=> '(' (args+=AnnotationArgument (',' args+=AnnotationArgument)*)? ')')?; |
| |
| AnnotationArgument: |
| LiteralAnnotationArgument | TypeRefAnnotationArgument |
| ; |
| |
| LiteralAnnotationArgument: |
| literal=Literal |
| ; |
| |
| TypeRefAnnotationArgument: |
| typeRef=TypeRef |
| ; |
| |
| AnnotationList: |
| =>('@' -> annotations+=AnnotationNoAtSign) annotations+=Annotation* |
| ; |
| |
| ExpressionAnnotationList: |
| annotations+=Annotation+ |
| ; |
| |
| PropertyAssignmentAnnotationList: |
| annotations+=Annotation+ |
| ; |
| |
| N4MemberAnnotationList: |
| {N4MemberAnnotationList} annotations+=Annotation+ |
| ; |
| |
| TypeReferenceName: |
| 'void' | 'This' | 'await' | 'Promisify' | 'target' | QualifiedTypeReferenceName |
| ; |
| |
| QualifiedTypeReferenceName: |
| IDENTIFIER ('.' IDENTIFIER)? |
| ; |
| N4ClassDeclaration <Yield>: |
| =>( |
| {N4ClassDeclaration} |
| (declaredModifiers+=N4Modifier)* |
| 'class' typingStrategy=TypingStrategyDefSiteOperator? name=BindingIdentifier<Yield>? |
| ) |
| TypeVariables? |
| ClassExtendsClause<Yield>? |
| Members<Yield> |
| ; |
| |
| fragment Members <Yield>*: |
| '{' |
| ownedMembersRaw+=N4MemberDeclaration<Yield>* |
| '}' |
| ; |
| |
| fragment ClassExtendsClause <Yield>*: |
| 'extends' ( |
| =>superClassRef=ParameterizedTypeRefNominal ('implements' ClassImplementsList)? |
| | superClassExpression=LeftHandSideExpression<Yield> |
| ) |
| | 'implements' ClassImplementsList |
| ; |
| |
| fragment ClassImplementsList*: |
| implementedInterfaceRefs+=ParameterizedTypeRefNominal |
| (',' implementedInterfaceRefs+=ParameterizedTypeRefNominal)* |
| ; |
| |
| N4ClassExpression <Yield>: |
| {N4ClassExpression} |
| 'class' name=BindingIdentifier<Yield>? |
| ClassExtendsClause<Yield>? |
| Members<Yield>; |
| N4InterfaceDeclaration <Yield>: |
| => ( |
| {N4InterfaceDeclaration} |
| (declaredModifiers+=N4Modifier)* |
| 'interface' typingStrategy=TypingStrategyDefSiteOperator? name=BindingIdentifier<Yield>? |
| ) |
| TypeVariables? |
| InterfaceImplementsList? |
| Members<Yield> |
| ; |
| |
| fragment InterfaceImplementsList*: |
| 'extends' superInterfaceRefs+=ParameterizedTypeRefNominal |
| (',' superInterfaceRefs+=ParameterizedTypeRefNominal)* |
| ; |
| N4EnumDeclaration <Yield>: |
| =>( |
| {N4EnumDeclaration} |
| (declaredModifiers+=N4Modifier)* |
| 'enum' name=BindingIdentifier<Yield>? |
| ) |
| '{' |
| (literals+=N4EnumLiteral (',' literals+=N4EnumLiteral)*)? |
| '}' |
| ; |
| N4EnumLiteral: name=IdentifierOrThis (':' value=STRING)?; |
| |
| enum N4Modifier: // validator applies further checks |
| private | project | protected | public |
| | external | abstract | static | const; |
| |
| N4MemberDeclaration <Yield>: |
| AnnotatedN4MemberDeclaration<Yield> |
| | N4GetterDeclaration<Yield> |
| | N4SetterDeclaration<Yield> |
| | N4MethodDeclaration<Yield> |
| | N4FieldDeclaration<Yield> |
| | N4CallableConstructorDeclaration<Yield> |
| ; |
| |
| AnnotatedN4MemberDeclaration <Yield> returns N4MemberDeclaration: |
| N4MemberAnnotationList ( |
| => ({N4GetterDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* GetterHeader<Yield>) (body=Block<Yield>)? ';'? |
| | => ({N4SetterDeclaration.annotationList=current} |
| (declaredModifiers+=N4Modifier)* 'set' -> LiteralOrComputedPropertyName <Yield>) |
| '(' fpar=FormalParameter<Yield> ')' (body=Block<Yield>)? ';'? |
| | => ( |
| {N4MethodDeclaration.annotationList=current} (declaredModifiers+=N4Modifier)* TypeVariables? |
| ( |
| generator?='*' LiteralOrComputedPropertyName<Yield> |
| ->MethodParamsReturnAndBody <Generator=true> |
| | AsyncNoTrailingLineBreak LiteralOrComputedPropertyName<Yield> |
| ->MethodParamsReturnAndBody <Generator=false> |
| ) |
| )';'? |
| | {N4FieldDeclaration.annotationList=current} FieldDeclarationImpl<Yield> |
| ) |
| ; |
| |
| fragment LiteralOrComputedPropertyName <Yield>*: |
| name=IdentifierName | name=STRING | name=NumericLiteralAsString |
| | '[' (=>((name=SymbolLiteralComputedName<Yield> | name=StringLiteralAsName) ']') |
| | computeNameFrom=AssignmentExpression<In=true,Yield> ']') |
| ; |
| |
| fragment LiteralPropertyName <Yield>*: |
| name=IdentifierName | name=STRING | name=NumericLiteralAsString |
| | '[' (name=SymbolLiteralComputedName<Yield> | name=StringLiteralAsName) ']' |
| ; |
| |
| StringLiteralAsName: |
| STRING |
| ; |
| |
| fragment FieldDeclarationImpl <Yield>*: |
| (declaredModifiers+=N4Modifier)* |
| LiteralPropertyName<Yield> ColonSepTypeRef? ('=' expression=Expression<In=true,Yield>)? ';' |
| ; |
| |
| N4FieldDeclaration <Yield>: |
| {N4FieldDeclaration} |
| FieldDeclarationImpl<Yield> |
| ; |
| |
| N4MethodDeclaration <Yield>: |
| => ({N4MethodDeclaration} (declaredModifiers+=N4Modifier)* TypeVariables? |
| ( |
| generator?='*' LiteralOrComputedPropertyName<Yield> |
| ->MethodParamsReturnAndBody <Generator=true> |
| | AsyncNoTrailingLineBreak LiteralOrComputedPropertyName<Yield> |
| ->MethodParamsReturnAndBody <Generator=false> |
| ) |
| ) ';'? |
| ; |
| |
| N4CallableConstructorDeclaration <Yield> returns N4MethodDeclaration: |
| MethodParamsReturnAndBody <Generator=false> ';'? |
| ; |
| |
| fragment MethodParamsAndBody <Generator>*: |
| StrictFormalParameters<Yield=Generator> |
| (body=Block<Yield=Generator>)? |
| ; |
| |
| fragment MethodParamsReturnAndBody <Generator>*: |
| StrictFormalParameters<Yield=Generator> |
| (':' returnTypeRef=TypeRef)? |
| (body=Block<Yield=Generator>)? |
| ; |
| |
| N4GetterDeclaration <Yield>: |
| => ({N4GetterDeclaration} |
| (declaredModifiers+=N4Modifier)* |
| GetterHeader<Yield>) |
| (body=Block<Yield>)? ';'? |
| ; |
| |
| fragment GetterHeader <Yield>*: |
| ('get' -> LiteralOrComputedPropertyName <Yield> '(' ')' ColonSepTypeRef?) |
| ; |
| |
| N4SetterDeclaration <Yield>: |
| =>({N4SetterDeclaration} |
| (declaredModifiers+=N4Modifier)* |
| 'set' |
| ->LiteralOrComputedPropertyName <Yield> |
| ) |
| '(' fpar=FormalParameter<Yield> ')' (body=Block<Yield>)? ';'? |
| ; |
| |
| BindingPattern <Yield>: |
| ObjectBindingPattern<Yield> |
| | ArrayBindingPattern<Yield> |
| ; |
| |
| ObjectBindingPattern <Yield>: |
| '{' (properties+=BindingProperty<Yield,AllowType=false> |
| (',' properties+=BindingProperty<Yield,AllowType=false>)*)? '}' |
| ; |
| |
| ArrayBindingPattern <Yield>: |
| '[' |
| elements+=Elision* ( |
| elements+=BindingRestElement<Yield> |
| (',' elements+=Elision* elements+=BindingRestElement<Yield>)* |
| (',' elements+=Elision*)? |
| )? |
| ']' |
| ; |
| |
| BindingProperty <Yield, AllowType>: |
| =>(LiteralBindingPropertyName<Yield> ':') value=BindingElement<Yield> |
| | value=SingleNameBinding<Yield,AllowType> |
| ; |
| |
| fragment LiteralBindingPropertyName <Yield>*: |
| declaredName=IdentifierName | declaredName=STRING | declaredName=NumericLiteralAsString |
| | '[' (declaredName=SymbolLiteralComputedName<Yield> | declaredName=STRING) ']' |
| ; |
| |
| SingleNameBinding <Yield, AllowType>: |
| varDecl=VariableDeclaration<In=true,Yield,AllowType> |
| ; |
| |
| BindingElement <Yield>: |
| =>(nestedPattern=BindingPattern<Yield>) ('=' expression=AssignmentExpression<In=true,Yield>)? |
| | varDecl=VariableDeclaration<In=true,Yield,AllowType=true> |
| ; |
| |
| BindingRestElement <Yield>: |
| rest?='...'? |
| ( |
| =>(nestedPattern=BindingPattern<Yield>) |
| ('=' expression=AssignmentExpression<In=true,Yield>)? |
| | varDecl=VariableDeclaration<In=true,Yield,AllowType=true> |
| ) |
| ; |
| |
| Elision: |
| ',' |
| ;</code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div id="footer"> |
| <div id="footer-text"> |
| Version 0.9<br> |
| Last updated 2019-08-08 13:15:33 CEST |
| </div> |
| </div> |
| <!-- ************* docinfo-footer *************************************************************** --> |
| <div class="Grid social" style="color:#d5dfea"> |
| <div class="Cell Cell--2-12 m-Cell--withMargin"> |
| <h2>Quick Links</h2> |
| <ul> |
| <li><a href="../downloads.html">Download</a></li> |
| <li><a href="../userguides/index.html">Documentation</a></li> |
| <li><a href="https://github.com/eclipse/n4js/">Source</a></li> |
| <li><a href="https://github.com/eclipse/n4js/issues">Issues</a></li> |
| </ul> |
| </div> |
| <div class="Cell Cell--2-12 m-Cell--withMargin"> |
| <br/><br/> |
| <ul> |
| <li><a href="https://www.eclipse.org/forums/index.php/f/365/">Forum</a></li> |
| <li><a href="http://n4js.blogspot.de/">Blog</a></li> |
| <li><a href="https://dev.eclipse.org/mailman/listinfo/n4js-dev">Mailing List</a></li> |
| <li><a href="https://projects.eclipse.org/projects/technology.n4js">Eclipse Project Page</a></li> |
| <li><a href="https://twitter.com/n4jsdev">Tweets by n4jsdev</a></li> |
| </ul> |
| </div> |
| <div class="Cell Cell--2-12 m-Cell--withMargin"> |
| <br/><br/> |
| <ul> |
| <li><a href="http://www.eclipse.org/">Eclipse Home</a></li> |
| <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li> |
| <li><a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li> |
| <li><a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li> |
| <li><a href="http://www.eclipse.org/legal/">Legal</a></li> |
| </ul> |
| </div> |
| <div style="clear: both; height: 0; overflow: hidden;"></div> |
| </div> |
| |
| <!-- ************* UI Scripts ************* --> |
| <script type="text/javascript" src="scripts/back-to-top.js"></script> |
| |
| <script type="text/javascript" src="scripts/treeview.js"></script> |
| <script type="text/javascript" src="scripts/toc.js"></script> |
| |
| <!-- ************* Prism.js Syntax Highlighting ************* --> |
| <script src="scripts/prism.js"></script> |
| |
| <script type="text/javascript"> |
| // Add the 'toclist' id for search function |
| $(".toc2 > ul").attr('id', 'toclist'); |
| // Generate a Search input form |
| $("#toclist > li:first-of-type").before('<input type="text" id="pagesearch" onkeyup="search()" placeholder="Search for section...">'); |
| $("#toclist > li:first-of-type").before('<i id="clear" class="fa fa-times-circle-o"></i>'); |
| $("#clear").click(function(){ |
| $("#pagesearch").val(''); |
| search(); |
| $('.toc2 > ul').treeView('collapseAll'); |
| }); |
| // intialize Treeview.js |
| $(".toc2 > ul").treeView(); |
| // Initialize Scrollspy |
| </script> |
| <!-- ************* docinfo-footer *************************************************************** --> |
| </body> |
| </html> |