Skip to content

Instantly share code, notes, and snippets.

@nicolo-ribaudo
Last active March 30, 2026 15:38
Show Gist options
  • Select an option

  • Save nicolo-ribaudo/883ea6e3b6e237ccbde2bf58e13dd8b6 to your computer and use it in GitHub Desktop.

Select an option

Save nicolo-ribaudo/883ea6e3b6e237ccbde2bf58e13dd8b6 to your computer and use it in GitHub Desktop.

Productions with optional elements whose SDOs omit the optional

These are cases where a grammar production has an optional (?) element on the right-hand side, and a syntax-directed operation defines a rule for that production without the optional part.

For example, the production Foo : Bar Baz? has two alternatives: Foo : Bar Baz and Foo : Bar. When an SDO is defined on Foo : Bar, it handles the "optional element absent" case.

100 total SDO cases across 36 productions.


FunctionExpression : function BindingIdentifier? ( FormalParameters ) { FunctionBody }

Definition

SDO rule: FunctionExpression : function ( FormalParameters ) { FunctionBody }

SDO Link
HasName sec-static-semantics-hasname
NamedEvaluation sec-runtime-semantics-namedevaluation
InstantiateOrdinaryFunctionExpression sec-runtime-semantics-instantiateordinaryfunctionexpression

GeneratorExpression : function * BindingIdentifier? ( FormalParameters ) { GeneratorBody }

Definition

SDO rule: GeneratorExpression : function * ( FormalParameters ) { GeneratorBody }

SDO Link
HasName sec-static-semantics-hasname
NamedEvaluation sec-runtime-semantics-namedevaluation
InstantiateGeneratorFunctionExpression sec-runtime-semantics-instantiategeneratorfunctionexpression

AsyncGeneratorExpression : async function * BindingIdentifier? ( FormalParameters ) { AsyncGeneratorBody }

Definition

SDO rule: AsyncGeneratorExpression : async function * ( FormalParameters ) { AsyncGeneratorBody }

SDO Link
HasName sec-static-semantics-hasname
NamedEvaluation sec-runtime-semantics-namedevaluation
InstantiateAsyncGeneratorFunctionExpression sec-runtime-semantics-instantiateasyncgeneratorfunctionexpression

AsyncFunctionExpression : async function BindingIdentifier? ( FormalParameters ) { AsyncFunctionBody }

Definition

SDO rule: AsyncFunctionExpression : async function ( FormalParameters ) { AsyncFunctionBody }

SDO Link
HasName sec-static-semantics-hasname
NamedEvaluation sec-runtime-semantics-namedevaluation
InstantiateAsyncFunctionExpression sec-runtime-semantics-instantiateasyncfunctionexpression

ClassExpression : class BindingIdentifier? ClassTail

Definition

SDO rule: ClassExpression : class ClassTail

SDO Link
HasName sec-static-semantics-hasname
NamedEvaluation sec-runtime-semantics-namedevaluation
Evaluation sec-class-definitions-runtime-semantics-evaluation

Block : { StatementList? }

Definition

SDO rule: Block : { }

SDO Link
ContainsDuplicateLabels sec-static-semantics-containsduplicatelabels
ContainsUndefinedBreakTarget sec-static-semantics-containsundefinedbreaktarget
ContainsUndefinedContinueTarget sec-static-semantics-containsundefinedcontinuetarget
Evaluation sec-block-runtime-semantics-evaluation
HasCallInTailPosition sec-static-semantics-hascallintailposition
LexicallyDeclaredNames sec-static-semantics-lexicallydeclarednames
VarDeclaredNames sec-static-semantics-vardeclarednames
VarScopedDeclarations sec-static-semantics-varscopeddeclarations

CaseBlock : { CaseClauses? }

Definition

SDO rule: CaseBlock : { }

SDO Link
CaseBlockEvaluation sec-runtime-semantics-caseblockevaluation
ContainsDuplicateLabels sec-static-semantics-containsduplicatelabels
ContainsUndefinedBreakTarget sec-static-semantics-containsundefinedbreaktarget
ContainsUndefinedContinueTarget sec-static-semantics-containsundefinedcontinuetarget
HasCallInTailPosition sec-static-semantics-hascallintailposition
LexicallyDeclaredNames sec-static-semantics-lexicallydeclarednames
LexicallyScopedDeclarations sec-static-semantics-lexicallyscopeddeclarations
VarDeclaredNames sec-static-semantics-vardeclarednames
VarScopedDeclarations sec-static-semantics-varscopeddeclarations

CaseClause : case Expression : StatementList?

Definition

SDO rule: CaseClause : case Expression :

SDO Link
Evaluation sec-switch-statement-runtime-semantics-evaluation

DefaultClause : default : StatementList?

Definition

SDO rule: DefaultClause : default :

SDO Link
Evaluation sec-switch-statement-runtime-semantics-evaluation

FunctionStatementList : StatementList?

Definition

SDO rule: FunctionStatementList : [empty]

SDO Link
ContainsDuplicateLabels sec-static-semantics-containsduplicatelabels
ContainsUndefinedBreakTarget sec-static-semantics-containsundefinedbreaktarget
ContainsUndefinedContinueTarget sec-static-semantics-containsundefinedcontinuetarget
Evaluation sec-function-definitions-runtime-semantics-evaluation
HasCallInTailPosition sec-static-semantics-hascallintailposition
LexicallyDeclaredNames sec-static-semantics-lexicallydeclarednames
LexicallyScopedDeclarations sec-static-semantics-lexicallyscopeddeclarations
VarDeclaredNames sec-static-semantics-vardeclarednames
VarScopedDeclarations sec-static-semantics-varscopeddeclarations

ClassStaticBlockStatementList : StatementList?

Definition

SDO rule: ClassStaticBlockStatementList : [empty]

SDO Link
ContainsDuplicateLabels sec-static-semantics-containsduplicatelabels
ContainsUndefinedBreakTarget sec-static-semantics-containsundefinedbreaktarget
ContainsUndefinedContinueTarget sec-static-semantics-containsundefinedcontinuetarget
Evaluation sec-class-definitions-runtime-semantics-evaluation
LexicallyDeclaredNames sec-static-semantics-lexicallydeclarednames
LexicallyScopedDeclarations sec-static-semantics-lexicallyscopeddeclarations
VarDeclaredNames sec-static-semantics-vardeclarednames
VarScopedDeclarations sec-static-semantics-varscopeddeclarations

Script : ScriptBody?

Definition

SDO rule: Script : [empty]

SDO Link
Evaluation sec-script-semantics-runtime-semantics-evaluation
LexicallyDeclaredNames sec-static-semantics-lexicallydeclarednames
LexicallyScopedDeclarations sec-static-semantics-lexicallyscopeddeclarations
VarDeclaredNames sec-static-semantics-vardeclarednames
VarScopedDeclarations sec-static-semantics-varscopeddeclarations

Module : ModuleBody?

Definition

SDO rule: Module : [empty]

SDO Link
Evaluation sec-module-semantics-runtime-semantics-evaluation
ExportEntries sec-static-semantics-exportentries
ImportEntries sec-static-semantics-importentries
LexicallyScopedDeclarations sec-static-semantics-lexicallyscopeddeclarations
ModuleRequests sec-static-semantics-modulerequests
VarScopedDeclarations sec-static-semantics-varscopeddeclarations

VariableDeclaration : BindingIdentifier Initializer?

Definition

SDO rule: VariableDeclaration : BindingIdentifier

SDO Link
Evaluation sec-variable-statement-runtime-semantics-evaluation

LexicalBinding : BindingIdentifier Initializer?

Definition

SDO rule: LexicalBinding : BindingIdentifier

SDO Link
Evaluation sec-let-and-const-declarations-runtime-semantics-evaluation

SingleNameBinding : BindingIdentifier Initializer?

Definition

SDO rule: SingleNameBinding : BindingIdentifier

SDO Link
ContainsExpression sec-static-semantics-containsexpression
HasInitializer sec-static-semantics-hasinitializer
IsSimpleParameterList sec-static-semantics-issimpleparameterlist

BindingElement : BindingPattern Initializer?

Definition

SDO rule: BindingElement : BindingPattern

SDO Link
HasInitializer sec-static-semantics-hasinitializer
IsSimpleParameterList sec-static-semantics-issimpleparameterlist

AssignmentElisionElement : Elision? AssignmentElement

Definition

SDO rule: AssignmentElisionElement : AssignmentElement

SDO Link
IteratorDestructuringAssignmentEvaluation sec-runtime-semantics-iteratordestructuringassignmentevaluation

ArrayBindingPattern : [ Elision? BindingRestElement? ]

Definition

Multiple SDO rules with different combinations of optionals omitted:

ArrayBindingPattern : [ ] (both Elision and BindingRestElement absent)

SDO Link
IteratorBindingInitialization sec-runtime-semantics-iteratorbindinginitialization

ArrayBindingPattern : [ Elision ] (BindingRestElement absent)

SDO Link
BoundNames sec-static-semantics-boundnames
ContainsExpression sec-static-semantics-containsexpression
IteratorBindingInitialization sec-runtime-semantics-iteratorbindinginitialization

ArrayBindingPattern : [ BindingElementList , Elision? BindingRestElement? ]

Definition

ArrayBindingPattern : [ BindingElementList , Elision ] (BindingRestElement absent)

SDO Link
BoundNames sec-static-semantics-boundnames
ContainsExpression sec-static-semantics-containsexpression
IteratorBindingInitialization sec-runtime-semantics-iteratorbindinginitialization

ArrayAssignmentPattern : [ Elision? AssignmentRestElement? ]

Definition

ArrayAssignmentPattern : [ ] (both absent)

SDO Link
DestructuringAssignmentEvaluation sec-runtime-semantics-destructuringassignmentevaluation

ArrayAssignmentPattern : [ Elision ] (AssignmentRestElement absent)

SDO Link
DestructuringAssignmentEvaluation sec-runtime-semantics-destructuringassignmentevaluation

ObjectBindingPattern : { BindingPropertyList , BindingRestProperty? }

Definition

SDO rule: ObjectBindingPattern : { BindingPropertyList , }

SDO Link
BindingInitialization sec-runtime-semantics-bindinginitialization

ObjectAssignmentPattern : { AssignmentPropertyList , AssignmentRestProperty? }

Definition

SDO rule: ObjectAssignmentPattern : { AssignmentPropertyList , }

SDO Link
DestructuringAssignmentEvaluation sec-runtime-semantics-destructuringassignmentevaluation

ImportDeclaration : import ImportClause FromClause WithClause? ;

Definition

SDO rule: ImportDeclaration : import ImportClause FromClause ;

SDO Link
ModuleRequests sec-static-semantics-modulerequests

ImportDeclaration : import ModuleSpecifier WithClause? ;

Definition

SDO rule: ImportDeclaration : import ModuleSpecifier ;

SDO Link
ModuleRequests sec-static-semantics-modulerequests

ExportDeclaration : export ExportFromClause FromClause WithClause? ;

Definition

SDO rule: ExportDeclaration : export ExportFromClause FromClause ;

SDO Link
IsConstantDeclaration sec-static-semantics-isconstantdeclaration
ModuleRequests sec-static-semantics-modulerequests

StringLiteral :: " DoubleStringCharacters? "

Definition

SDO rule: StringLiteral :: " "

SDO Link
SV sec-static-semantics-sv

StringLiteral :: ' SingleStringCharacters? '

Definition

SDO rule: StringLiteral :: ' '

SDO Link
SV sec-static-semantics-sv

NoSubstitutionTemplate :: TemplateCharacters?

Definition

SDO rule: NoSubstitutionTemplate ::

SDO Link
TV sec-static-semantics-tv
TRV sec-static-semantics-trv

TemplateHead :: TemplateCharacters? ${

Definition

SDO rule: TemplateHead :: ${

SDO Link
TV sec-static-semantics-tv
TRV sec-static-semantics-trv

TemplateMiddle :: } TemplateCharacters? ${

Definition

SDO rule: TemplateMiddle :: } ${

SDO Link
TV sec-static-semantics-tv
TRV sec-static-semantics-trv

TemplateTail :: } TemplateCharacters?

Definition

SDO rule: TemplateTail :: }

SDO Link
TV sec-static-semantics-tv
TRV sec-static-semantics-trv

DecimalLiteral : DecimalIntegerLiteral . DecimalDigits? ExponentPart?

Definition

Multiple SDO rules with different optionals omitted:

DecimalLiteral : DecimalIntegerLiteral . DecimalDigits (ExponentPart absent)

SDO Link
IdentifierCodePoint sec-identifiercodepoint

DecimalLiteral : DecimalIntegerLiteral . ExponentPart (DecimalDigits absent)

SDO Link
IdentifierCodePoint sec-identifiercodepoint

DecimalLiteral : . DecimalDigits ExponentPart?

Definition

SDO rule: DecimalLiteral : . DecimalDigits

SDO Link
IdentifierCodePoint sec-identifiercodepoint

DecimalBigIntegerLiteral : NonZeroDigit DecimalDigits? BigIntLiteralSuffix

Definition

SDO rule: DecimalBigIntegerLiteral : NonZeroDigit BigIntLiteralSuffix

SDO Link
NumericValue sec-numericvalue

DecimalEscape : NonZeroDigit DecimalDigits?

Definition

SDO rule: DecimalEscape : NonZeroDigit

SDO Link
CapturingGroupNumber sec-patterns-static-semantics-capturing-group-number
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment