@gobstones/gobstones-lang
Version:
228 lines (227 loc) • 5.43 kB
JSON
[
["start",
[["*", ["definition"]]]
],
["definition",
["defProgram"],
["defInteractiveProgram"],
["defProcedure"],
["defFunction"],
["defType"]
],
["defProgram",
["PROGRAM", "stmtBlock"]
],
["defInteractiveProgram",
["INTERACTIVE", "PROGRAM", ["*", ["stmtSwitchBranch"]], "RBRACE"]
],
["defProcedure",
["PROCEDURE", "LPAREN", "loweridSeq", "RPAREN", "stmtBlock"]
],
["defFunction",
["FUNCTION", "LPAREN", "loweridSeq", "RPAREN", "stmtBlock"]
],
["defType",
["FUNCTION", "LPAREN", "loweridSeq", "RPAREN", "stmtBlock"],
["TYPE", "UPPERID", "IS", "RECORD", "LBRACE", ["*", ["fieldDeclaration"]], "RBRACE"],
["TYPE", "UPPERID", "IS", "VARIANT", "LBRACE", ["*", ["constructorDeclaration"]], "RBRACE"]
],
["constructorDeclaration",
["CASE", "UPPERID", "LBRACE", ["*", ["fieldDeclaration"]], "RBRACE"]
],
["fieldDeclaration",
["FIELD", "LOWERID"]
],
["loweridSeq",
["EMPTY"],
["nonEmptyLoweridSeq"]
],
["nonEmptyLoweridSeq",
["LOWERID", ["?", ["COMMA", "nonEmptyLoweridSeq"]]]
],
["statement",
["stmtEllipsis"],
["stmtBlock"],
["stmtReturn"],
["stmtIf"],
["stmtRepeat"],
["stmtForeach"],
["stmtWhile"],
["stmtSwitch"],
["stmtLet"],
["stmtVariableAssignment"],
["stmtProcedureCall"]
],
["stmtEllipsis",
["ELLIPSIS"]
],
["stmtBlock",
["LBRACE", ["*", ["statement", ["?", ["SEMICOLON"]]]], "RBRACE"]
],
["stmtReturn",
["RETURN", "LPAREN", "nonEmptyExpressionSeq", "RPAREN"]
],
["stmtIf",
["IF", "stmtIfBranch", ["*", ["ELSEIF", "stmtIfBranch"]], ["?", ["ELSE", "stmtBlock"]]]
],
["stmtIfBranch",
["LPAREN", "expression", "RPAREN", ["?", ["THEN"]], "stmtBlock"]
],
["stmtRepeat",
["REPEAT", "LPAREN", "expression", "RPAREN", "stmtBlock"]
],
["stmtForeach",
["FOREACH", "pattern", "IN", "expression", "stmtBlock"]
],
["stmtWhile",
["WHILE", "LPAREN", "expression", "RPAREN", "stmtBlock"]
],
["stmtSwitch",
["SWITCH", "LPAREN", "expression", "RPAREN", ["?", ["TO"]], "LBRACE", ["*", ["stmtSwitchBranch"]], "RBRACE"]
],
["stmtSwitchBranch",
["pattern", "ARROW", "stmtBlock"]
],
["stmtLet",
["LET", "stmtVariableAssignment"],
["LET", "stmtTupleAssignment"]
],
["stmtVariableAssignment",
["LOWERID", "ASSIGN", "expression"]
],
["stmtTupleAssignment",
["LPAREN", "RPAREN", "ASSIGN", "expression"],
["LPAREN", "LOWERID", "COMMA", "nonEmptyLoweridSeq", "RPAREN", "ASSIGN", "expression"]
],
["stmtProcedureCall",
["UPPERID", "LPAREN", "expressionSeq", "RPAREN"]
],
["pattern",
["patternWildcard"],
["patternVariable"],
["patternNumber"],
["patternStructure"],
["patternTuple"],
["patternTimeout"]
],
["patternWildcard",
["UNDERSCORE"]
],
["patternVariable",
["LOWERID"]
],
["patternNumber",
["NUM"],
["MINUS", "NUM"]
],
["patternStructure",
["UPPERID", ["?", ["LPAREN", "loweridSeq", "RPAREN"]]]
],
["patternTuple",
["LPAREN", "RPAREN"],
["LPAREN", "LOWERID", "COMMA", "nonEmptyLoweridSeq", "RPAREN"]
],
["patternTimeout",
["TIMEOUT", "LPAREN", "NUM", "RPAREN"]
],
["expression",
["exprAtom"],
["expression", "infixOperator", "expression"],
["prefixOperator", "expression"],
["LPAREN", "expression", "RPAREN"]
],
["exprAtom",
["exprEllipsis"],
["exprVariable"],
["exprFunctionCall"],
["exprConstantNumber"],
["exprConstantString"],
["exprChoose"],
["exprMatching"],
["exprList"],
["exprRange"],
["exprTuple"],
["exprStructure"],
["exprStructureUpdate"]
],
["exprEllipsis",
["ELLIPSIS"]
],
["exprVariable",
["LOWERID"]
],
["exprFunctionCall",
["LOWERID", "LPAREN", "expressionSeq", "RPAREN"]
],
["exprConstantNumber",
["NUM"]
],
["exprConstantString",
["STRING"]
],
["exprChoose",
["CHOOSE",
["*", ["expression", "WHEN", "LPAREN", "expression", "RPAREN"]],
"expression", "OTHERWISE"]
],
["exprMatching",
["MATCHING", "expression", "SELECT",
["*", ["expression", "ON", "pattern"]],
"expression", "OTHERWISE"]
],
["exprList",
["LBRACK", "expressionSeq", "RBRACK"]
],
["exprRange",
["LBRACK", "expression", "RANGE", "expression", "RBRACK"],
["LBRACK", "expression", "COMMA", "expression", "RANGE", "expression", "RBRACK"]
],
["exprTuple",
["LPAREN", "RPAREN"],
["LPAREN", "expression", "COMMA", "nonEmptyExpressionSeq", "RPAREN"]
],
["exprStructure",
["UPPERID", ["?", ["LPAREN", "fieldBindingSeq", "RPAREN"]]]
],
["exprStructureUpdate",
["UPPERID", "LPAREN", "expression", "PIPE", "fieldBindingSeq", "RPAREN"]
],
["fieldBinding",
["LOWERID", "GETS", "expression"]
],
["fieldBindingSeq",
["EMPTY"],
["nonEmptyFieldBindingSeq"]
],
["nonEmptyFieldBindingSeq",
["fieldBinding", ["?", ["COMMA", "nonEmptyFieldBindingSeq"]]]
],
["infixOperator",
["OR"],
["AND"],
["EQ"],
["NE"],
["LE"],
["GE"],
["LT"],
["GT"],
["CONCAT"],
["PLUS"],
["MINUS"],
["TIMES"],
["DIV"],
["MOD"],
["POW"]
],
["prefixOperator",
["MINUS"],
["NOT"]
],
["expressionSeq",
["EMPTY"],
["nonEmptyExpressionSeq"]
],
["nonEmptyExpressionSeq",
["expression", ["?", ["COMMA", "nonEmptyExpressionSeq"]]]
]
]