// Stores definitions which must be used in multiple places
// See `cargo gen-syntax` (defined in crates/tools/src/main.rs)
Grammar(
single_char_tokens: [
["&", "AMP"],
["|", "PIPE"],
["+", "PLUS"],
["-", "MINUS"],
["*", "STAR"],
["/", "SLASH"],
["%", "PERCENT"],
["^", "CARET"],
["#", "HASH"],
[".", "DOT"],
["<", "LT"],
[">", "GT"],
["=", "EQ"],
["(", "L_PAREN"],
[")", "R_PAREN"],
["{", "L_CURLY"],
["}", "R_CURLY"],
["[", "L_BRACKET"],
["]", "R_BRACKET"],
[";", "SEMI"],
[":", "COLON"],
[",", "COMMA"],
["!", "EXCLAMATION"],
// Extended symbols
["_", "UNDERSCORE"],
],
// Tokens for which the longest match must be chosen (e.g. `..` is a DOTDOT, but `.` is a DOT)
multi_char_tokens: [
// Original Lua symbols
["==", "EQEQ"],
// Not equals differs from Lua in that != is used.
["!=", "NEQ"], //["~= ", ""]
["<=", "LTEQ"],
[">=", "GTEQ"],
["..", "DOTDOT"],
["...", "DOTDOTDOT"],
// Extended symbols
["+=", "PLUSEQ"],
["-=", "MINUSEQ"],
["*=", "STAREQ"],
["/=", "SLASHEQ"],
["%=", "PERCENTEQ"],
["<<=", "SHLEQ"],
[">>=", "SHREQ"],
["&=", "AMPEQ"],
["|=", "PIPEEQ"],
["^=", "CARETEQ"],
["..=", "DOTDOTEQ"],
["::", "COLONCOLON"],
["->", "THIN_ARROW"],
["&&", "AMPAMP"],
["||", "PIPEPIPE"],
["<<", "SHL"],
[">>", "SHR"],
],
keywords: [
// Original Lua keywords
"break",
"do",
"else",
// "elseif", // Simply use else if
// "end", // We use braces
"false",
"for",
"fn",
"if",
"in",
"as",
"use",
// "local", // We use let
"nil",
// "not", // We use !
// "or",
// "repeat", // Not supported
"return",
// "then", // Not supported
"true",
// "until", // Not supported
"while",
"loop",
// Extended keywords
"let",
"mut",
"class",
"struct",
"never",
"pub",
"type",
"package",
"super",
"self",
"extern"
],
literals: [
"INT_NUMBER",
"FLOAT_NUMBER",
"STRING",
],
tokens: [
"ERROR",
"IDENT",
"INDEX",
"WHITESPACE",
"COMMENT",
// Contextual keywords
"GC_KW",
"VALUE_KW",
],
nodes: [
"SOURCE_FILE",
"FUNCTION_DEF",
"EXTERN",
"RET_TYPE",
"VISIBILITY",
"PARAM_LIST",
"PARAM",
"STRUCT_DEF",
"TYPE_ALIAS_DEF",
"MEMORY_TYPE_SPECIFIER",
"RECORD_FIELD_DEF_LIST",
"RECORD_FIELD_DEF",
"TUPLE_FIELD_DEF_LIST",
"TUPLE_FIELD_DEF",
"PATH_TYPE",
"ARRAY_TYPE",
"NEVER_TYPE",
"LET_STMT",
"EXPR_STMT",
"PATH_EXPR",
"PREFIX_EXPR",
"LITERAL",
"BIN_EXPR",
"PAREN_EXPR",
"CALL_EXPR",
"FIELD_EXPR",
"IF_EXPR",
"INDEX_EXPR",
"BLOCK_EXPR",
"RETURN_EXPR",
"WHILE_EXPR",
"LOOP_EXPR",
"BREAK_EXPR",
"ARRAY_EXPR",
"CONDITION",
"BIND_PAT",
"PLACEHOLDER_PAT",
"ARG_LIST",
"NAME",
"NAME_REF",
"PATH",
"PATH_SEGMENT",
"RECORD_LIT",
"RECORD_FIELD_LIST",
"RECORD_FIELD",
"USE",
"USE_TREE",
"USE_TREE_LIST",
"RENAME"
],
ast: {
"SourceFile": (
traits: [ "ModuleItemOwner", "FunctionDefOwner" ],
),
"ModuleItem": (
enum: ["Use", "FunctionDef", "StructDef", "TypeAliasDef"]
),
"Visibility": (),
"FunctionDef": (
traits: [
"NameOwner",
"VisibilityOwner",
"DocCommentsOwner",
"ExternOwner",
],
options: [ "ParamList", ["body", "BlockExpr"], "RetType" ],
),
"RetType": (options: ["TypeRef"]),
"ParamList": (
collections: [
["params", "Param"]
]
),
"Param": (
options: [ "Pat" ],
traits: [
"TypeAscriptionOwner"
],
),
"StructDef": (
options: ["MemoryTypeSpecifier"],
traits: [
"NameOwner",
"VisibilityOwner",
"DocCommentsOwner",
]
),
"TypeAliasDef": (
options: ["TypeRef"],
traits: [
"NameOwner",
"VisibilityOwner",
"DocCommentsOwner",
]
),
"MemoryTypeSpecifier": (),
"RecordFieldDefList": (collections: [("fields", "RecordFieldDef")]),
"RecordFieldDef": (
traits: [
"NameOwner",
"VisibilityOwner",
"DocCommentsOwner",
"TypeAscriptionOwner"
]
),
"TupleFieldDefList": (collections: [("fields", "TupleFieldDef")]),
"TupleFieldDef": (
options: [
"TypeRef",
],
traits: [
"VisibilityOwner",
]
),
"LetStmt": (
options: [
["pat", "Pat"],
["initializer", "Expr"],
],
traits: [
"TypeAscriptionOwner",
]
),
"Condition": (
options: [ "Pat", "Expr" ]
),
"ExprStmt": (
options: [ ["expr", "Expr"] ]
),
"Stmt": (
enum: ["LetStmt", "ExprStmt"]
),
"LoopExpr": (
traits: ["LoopBodyOwner"]
),
"WhileExpr": (
traits: ["LoopBodyOwner"],
options: [ "Condition" ]
),
"PathExpr": (options: ["Path"]),
"PrefixExpr": (options: ["Expr"]),
"BinExpr": (),
"Literal": (),
"ParenExpr": (options: ["Expr"]),
"CallExpr": (
traits: ["ArgListOwner"],
options: [ "Expr" ],
),
"IndexExpr": (
),
"FieldExpr": (
options: ["Expr", "NameRef"]
),
"IfExpr": (
options: [ "Condition" ]
),
"BreakExpr": (options: ["Expr"]),
"ArrayExpr": (
collections: [
[ "exprs", "Expr" ]
]
),
"ArgList": (
collections: [
["args", "Expr"]
]
),
"Expr": (
enum: [
"Literal",
"PrefixExpr",
"PathExpr",
"BinExpr",
"ParenExpr",
"CallExpr",
"FieldExpr",
"IfExpr",
"LoopExpr",
"WhileExpr",
"ReturnExpr",
"BreakExpr",
"BlockExpr",
"ArrayExpr",
"IndexExpr",
"RecordLit",
]
),
"Name": (),
"NameRef": (),
"PathType": (options: ["Path"]),
"ArrayType": (options: ["TypeRef"]),
"NeverType": (),
"TypeRef": (
enum: [
"PathType",
"ArrayType",
"NeverType",
]
),
"ReturnExpr": (options: ["Expr"]),
"BlockExpr": (
options: [ "Expr" ],
collections: [
["statements", "Stmt"],
],
),
"Path": (
options: [
["segment", "PathSegment"],
["qualifier", "Path"],
]
),
"PathSegment": (
options: [ "NameRef" ]
),
"BindPat": (
options: [ "Pat" ],
traits: ["NameOwner"]
),
"PlaceholderPat": (),
"Pat": (
enum: [
"BindPat",
"PlaceholderPat"
],
),
"RecordLit": (options: ["TypeRef", "RecordFieldList"]),
"RecordFieldList": (
collections: [ ("fields", "RecordField") ],
options: [["spread", "Expr"]]
),
"RecordField": (options: ["NameRef", "Expr"]),
"Use": (
options: [["use_tree", "UseTree"]],
traits: ("VisibilityOwner")
),
"UseTree": (
options: [
["use_tree_list", "UseTreeList"],
["path", "Path"],
["rename", "Rename"]
]
),
"UseTreeList": (
collections: [ ("use_trees", "UseTree") ]
),
"Rename": (
traits: ("NameOwner")
)
}
)