{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "gcode",
"rules": {
"source_file": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_marker"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "SYMBOL",
"name": "_marker"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
]
},
"_marker": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "%"
}
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "line"
},
{
"type": "SYMBOL",
"name": "unsigned_integer"
},
{
"type": "SYMBOL",
"name": "eol_comment"
}
]
},
"_end_of_line": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\n"
},
{
"type": "PATTERN",
"value": "\\r\\n"
},
{
"type": "PATTERN",
"value": "\\r"
},
{
"type": "SYMBOL",
"name": "eol_comment"
}
]
},
"inline_comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "PATTERN",
"value": "[^\\)]*"
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"eol_comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "PATTERN",
"value": ".*"
}
]
}
},
"line": {
"type": "PREC",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "line_number"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "word"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "checksum"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "eol_comment"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_end_of_line"
}
]
}
},
"_line_identifier": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[nN]"
},
"named": false,
"value": "n"
},
"line_number": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_line_identifier"
},
{
"type": "SYMBOL",
"name": "unsigned_integer"
}
]
},
"unsigned_number": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "\\d+"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "PATTERN",
"value": "\\d+"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "PATTERN",
"value": "\\d+"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "\\d+"
},
{
"type": "STRING",
"value": "."
}
]
}
]
},
"number": {
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "unsigned_number"
}
]
},
"named": false,
"value": "number"
},
"unsigned_integer": {
"type": "PATTERN",
"value": "\\d+"
},
"integer": {
"type": "ALIAS",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "unsigned_integer"
}
]
},
"named": false,
"value": "integer"
},
"word": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "g_word"
},
{
"type": "SYMBOL",
"name": "m_word"
},
{
"type": "SYMBOL",
"name": "t_word"
},
{
"type": "SYMBOL",
"name": "s_word"
},
{
"type": "SYMBOL",
"name": "f_word"
},
{
"type": "SYMBOL",
"name": "o_word"
},
{
"type": "SYMBOL",
"name": "axis_word"
},
{
"type": "SYMBOL",
"name": "indexed_axis_word"
},
{
"type": "SYMBOL",
"name": "parameter_word"
},
{
"type": "SYMBOL",
"name": "parameter_variable"
},
{
"type": "SYMBOL",
"name": "polar_distance"
},
{
"type": "SYMBOL",
"name": "polar_angle"
},
{
"type": "SYMBOL",
"name": "spindle_select"
},
{
"type": "SYMBOL",
"name": "other_word"
}
]
},
"_g_word_identifier": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[gG]"
},
"named": false,
"value": "g"
},
"_m_word_identifier": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[mM]"
},
"named": false,
"value": "m"
},
"_f_word_identifier": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[fF]"
},
"named": false,
"value": "f"
},
"_t_word_identifier": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[tT]"
},
"named": false,
"value": "t"
},
"_s_word_identifier": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS]"
},
"named": false,
"value": "s"
},
"_o_word_identifier": {
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[oO]"
},
"named": false,
"value": "o"
},
"_other_word_identifier": {
"type": "PATTERN",
"value": "[dDhHiIjJkKlLqQrR]"
},
"axis_identifier": {
"type": "PATTERN",
"value": "[xXyYzZaAbBcCuUvVwWeE]"
},
"parameter_identifier": {
"type": "PATTERN",
"value": "[pP#]"
},
"property_name": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "PATTERN",
"value": "[a-zA-Z0-9_-]*"
},
{
"type": "STRING",
"value": ">"
}
]
}
},
"_word_code": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "parameter_word"
}
]
},
"_word_code_unsigned_int": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "unsigned_integer"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "parameter_word"
}
]
},
"g_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_g_word_identifier"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"m_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_m_word_identifier"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"f_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_f_word_identifier"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"t_marlin_special": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_t_word_identifier"
},
{
"type": "PATTERN",
"value": "[?cxCX]"
}
]
},
"t_word": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_t_word_identifier"
},
{
"type": "SYMBOL",
"name": "_word_code_unsigned_int"
}
]
},
{
"type": "SYMBOL",
"name": "t_marlin_special"
}
]
},
"s_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_s_word_identifier"
},
{
"type": "SYMBOL",
"name": "_word_code_unsigned_int"
}
]
},
"polar_distance": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"polar_angle": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "^"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"checksum": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"spindle_select": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"axis_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "axis_identifier"
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"indexed_axis_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "axis_identifier"
},
{
"type": "FIELD",
"name": "index",
"content": {
"type": "SYMBOL",
"name": "unsigned_integer"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"parameter_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameter_identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "FIELD",
"name": "parameter_name",
"content": {
"type": "SYMBOL",
"name": "property_name"
}
}
]
}
]
},
"parameter_variable": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameter_identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "index",
"content": {
"type": "SYMBOL",
"name": "unsigned_integer"
}
},
{
"type": "FIELD",
"name": "parameter_name",
"content": {
"type": "SYMBOL",
"name": "property_name"
}
}
]
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "_word_code"
}
]
},
"other_word": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_other_word_identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_word_code"
},
{
"type": "BLANK"
}
]
}
]
}
},
"expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "parameter_word"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "number"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"_operand": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "parameter_word"
}
]
},
"binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "STRING",
"value": "+"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "STRING",
"value": "/"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[mM][oO][dD]"
},
"named": false,
"value": "mod"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 5,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "STRING",
"value": "**"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][qQ]"
},
"named": false,
"value": "eq"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[nN][eE]"
},
"named": false,
"value": "ne"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[gG][tT]"
},
"named": false,
"value": "gt"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[gG][eE]"
},
"named": false,
"value": "ge"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[lL][tT]"
},
"named": false,
"value": "lt"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[lL][eE]"
},
"named": false,
"value": "le"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][nN][dD]"
},
"named": false,
"value": "and"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[oO][rR]"
},
"named": false,
"value": "or"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_operand"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[xX][oO][rR]"
},
"named": false,
"value": "xor"
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
}
}
]
},
"unary_expression": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][bB][sS]"
},
"named": false,
"value": "abs"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][cC][oO][sS]"
},
"named": false,
"value": "acos"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][sS][iI][nN]"
},
"named": false,
"value": "asin"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][oO][sS]"
},
"named": false,
"value": "cos"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][xX][pP]"
},
"named": false,
"value": "exp"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[fF][iI][xX]"
},
"named": false,
"value": "fix"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[fF][uU][pP]"
},
"named": false,
"value": "fup"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[lL][nN]"
},
"named": false,
"value": "ln"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[rR][oO][uU][nN][dD]"
},
"named": false,
"value": "round"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS][iI][nN]"
},
"named": false,
"value": "sin"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS][qQ][rR][tT]"
},
"named": false,
"value": "sqrt"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[tT][aA][nN]"
},
"named": false,
"value": "tan"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[aA][tT][aA][nN]"
},
"named": false,
"value": "atan"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][xX][iI][sS][tT][sS]"
},
"named": false,
"value": "exists"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[bB][iI][nN]"
},
"named": false,
"value": "bin"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[bB][cC][dD]"
},
"named": false,
"value": "bcd"
}
]
},
{
"type": "SYMBOL",
"name": "_operand"
}
]
},
"_fanuc_o_word": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_o_word_identifier"
},
{
"type": "SYMBOL",
"name": "number"
}
]
},
"fanuc_if_statement": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[iI][fF]"
},
"named": false,
"value": "if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "fanuc_unconditional"
},
{
"type": "SYMBOL",
"name": "_fanuc_conditional"
}
]
}
]
},
"fanuc_unconditional": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[gG][oO][tT][oO]"
},
"named": false,
"value": "goto"
},
{
"type": "SYMBOL",
"name": "integer"
}
]
},
"_fanuc_conditional": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[tT][hH][eE][nN]"
},
"named": false,
"value": "then"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SYMBOL",
"name": "parameter_variable"
}
]
}
]
},
"fanuc_loop": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[wW][hH][iI][lL][eE]"
},
"named": false,
"value": "while"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[dD][oO]"
},
"named": false,
"value": "do"
},
{
"type": "SYMBOL",
"name": "integer"
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "line"
}
},
{
"type": "SYMBOL",
"name": "_fanuc_loop_end"
}
]
},
"_fanuc_loop_end": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][nN][dD]"
},
"named": false,
"value": "end"
},
{
"type": "SYMBOL",
"name": "integer"
}
]
},
"o_word": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "subroutine_call"
},
{
"type": "SYMBOL",
"name": "_fanuc_o_word"
},
{
"type": "SYMBOL",
"name": "subroutine_definition"
},
{
"type": "SYMBOL",
"name": "fanuc_loop"
},
{
"type": "SYMBOL",
"name": "fanuc_if_statement"
},
{
"type": "SYMBOL",
"name": "fanuc_unconditional"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "loop"
}
]
},
"_label": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "direct_label"
},
{
"type": "SYMBOL",
"name": "indirect_label"
}
]
},
"direct_label": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_o_word_identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "FIELD",
"name": "subroutine_name",
"content": {
"type": "SYMBOL",
"name": "property_name"
}
}
]
}
]
},
"indirect_label": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_o_word_identifier"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"subroutine_call": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][aA][lL][lL]"
},
"named": false,
"value": "call"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "FIELD",
"name": "arg",
"content": {
"type": "SYMBOL",
"name": "expression"
}
}
},
{
"type": "BLANK"
}
]
}
]
},
"subroutine_block": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "line"
},
{
"type": "SYMBOL",
"name": "return_statement"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "loop"
},
{
"type": "SYMBOL",
"name": "continue_statement"
},
{
"type": "SYMBOL",
"name": "break_statement"
}
]
},
"subroutine_definition": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[sS][uU][bB]"
},
"named": false,
"value": "sub"
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "subroutine_block"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][nN][dD][sS][uU][bB]"
},
"named": false,
"value": "endsub"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "return_value",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "BLANK"
}
]
}
]
},
"if_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[iI][fF]"
},
"named": false,
"value": "if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "subroutine_block"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "elseif_clause"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "else_clause"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][nN][dD][iI][fF]"
},
"named": false,
"value": "endif"
}
]
},
"elseif_clause": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][lL][sS][eE][iI][fF]"
},
"named": false,
"value": "elseif"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "subroutine_block"
}
},
{
"type": "BLANK"
}
]
}
]
}
},
"else_clause": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][lL][sS][eE]"
},
"named": false,
"value": "else"
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "subroutine_block"
}
},
{
"type": "BLANK"
}
]
}
]
}
},
"loop": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_while_loop"
},
{
"type": "SYMBOL",
"name": "_do_while_loop"
},
{
"type": "SYMBOL",
"name": "_repeat_loop"
}
]
},
"_while_loop": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[wW][hH][iI][lL][eE]"
},
"named": false,
"value": "while"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "subroutine_block"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][nN][dD][wW][hH][iI][lL][eE]"
},
"named": false,
"value": "endwhile"
}
]
},
"_do_while_loop": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[dD][oO]"
},
"named": false,
"value": "do"
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "subroutine_block"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[wW][hH][iI][lL][eE]"
},
"named": false,
"value": "while"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "expression"
}
}
]
},
"_repeat_loop": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[rR][eE][pP][eE][aA][tT]"
},
"named": false,
"value": "repeat"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "SYMBOL",
"name": "_end_of_line"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "subroutine_block"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[eE][nN][dD][rR][eE][pP][eE][aA][tT]"
},
"named": false,
"value": "endrepeat"
}
]
},
"continue_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[cC][oO][nN][tT][iI][nN][uU][eE]"
},
"named": false,
"value": "continue"
}
]
},
"break_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[bB][rR][eE][aA][kK]"
},
"named": false,
"value": "break"
}
]
},
"return_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_label"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[rR][eE][tT][uU][rR][nN]"
},
"named": false,
"value": "return"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "return_value",
"content": {
"type": "SYMBOL",
"name": "expression"
}
},
{
"type": "BLANK"
}
]
}
]
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "SYMBOL",
"name": "inline_comment"
}
],
"conflicts": [
[
"_fanuc_o_word",
"direct_label"
],
[
"o_word",
"subroutine_block"
],
[
"_while_loop",
"_do_while_loop"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}