Demo

The FunctionalScript module grammar, drawn from the rules the parser reads a module with. Follow a track from left to right; a pill is a token, a grey one in italics any token of its kind, and a box is another diagram — select it to go there.

module

importStatement

importimportClausefromstringattributeend

importClause

namedImports

importBindings

importBinding

attribute

with{identifierName:string}

constStatement

bindingTarget

lastStatement

end

;

value

-unaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTail~unaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTail!unaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailtypeofunaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailprimitiveaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailtemplateaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailidentifierarrowOrRestarrayaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailnewExpressionaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailparenobjectaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTail

body

-unaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTail~unaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTail!unaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailtypeofunaryOperandmul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailprimitiveaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailtemplateaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailidentifierarrowOrRestarrayaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailnewExpressionaccess**unarymul_div_modadd_subleft_right_unsignedlt_le_gt_ge_instanceof_ineq_neandxororcircuitTailconditionalTailparenblock

block

blockContents

branchBlock

branchContents

branchElse

ifStatement

simpleStatement

whileStatement

forStatement

forHeader

forDeclarationTail

forClassicTail

loopBlock

loopStatement

loopIfStatement

loopElse

loopSwitch

switch(value){loopCasedefault:loopBlock}

loopCase

terminator

returnvalueendthrowvalueendswitch(value){casevalue:caseTail

caseTail

afterCase

paren

parenthesized

func

parameters

afterValue

parenItems

parameterNames

arrowOrRest

unary

unaryOperand

parenGroup

group

parenGroupOperand

groupOperand

mul_div_mod

add_sub

left_right_unsigned

lt_le_gt_ge_instanceof_in

eq_ne

and

xor

or

circuitTail

conditionalTail

access

newExpression

newExpressionStatement

constructorCallee

memberAccess

optionalStep

callArguments

template

noSubstitutionTemplatetemplateHeadvaluetemplateMiddletemplateTail

array

elements

values

item

object

entries

entry

member

primitive

nulltruefalseundefinedNaNInfinitynumberstringbigint

identifier

idkeywordimportconstexportdefaultfromwithreturnthrowifelseletwhileforbreakcontinueswitchcaseasofinstanceofin

identifierName

idkeywordimportconstexportdefaultfromwithreturnthrowifelseletwhileforbreakcontinueswitchcaseasofinstanceofintypeofnewnulltruefalseundefinedNaNInfinity

Emergent Testing

Idle. Press Run to start the suite.

  • ./for_of.proof.f.mjs
  • ./proof.f.mjs