Files
tia-lsp/src/node-types.json
T
lazar fb55915147 feat: major grammar upgrade for SCL spec conformance (Phase 1)
Comprehensive grammar rewrite to conform to SCL specs. Improves parse
success rate from 0% to 90% (187 of 208 reference project files).

Case-insensitive keywords:
- Add ci() helper for case-insensitive token matching
- All keywords (TYPE, STRUCT, VAR, IF, etc.) now match any case
- All type names (BOOL, Int, Dint, etc.) now match any case

New grammar constructs:
- RETURN statement
- GOTO statement
- AUTHOR/FAMILY/NAME block headers
- VAR DB_SPECIFIC section
- ARRAY[*] (variable-length arrays)
- Multidimensional ARRAY[a..b, c..d]
- REF_TO <type>
- VARIANT type
- Anonymous STRUCT...END_STRUCT as a type
- Compound assignment operators (+=, -=, *=, /=, &=, |=, ^=)
- Chained assignments (lvalue := lvalue := expression)
- Bit access (lvalue.%X0)
- Method calls (lvalue.field(...))
- Struct/array initializers ((TRUE, FALSE, ...), (name := value))
- END_STRUCT; (semicolon after END_STRUCT in UDTs)
- Typed DB associated block name (DATA_BLOCK "Name" : "UDT")
- BOM (Byte Order Mark) handling
- TITLE as single-token statement (avoids keyword/identifier conflict)

New type_builtin aliases:
- LWORD, LINT, ULINT, UDINT, DATE, TIME_OF_DAY, DATE_AND_TIME
- S5TIME, LTIME, DTL, LTOD, LDT, LTIME_OF_DAY, DATE_AND_LTIME

New literal formats:
- Binary (2#...), Octal (8#...)
- BOOL#TRUE/FALSE
- Typed integers (INT#, SINT#, DINT#, etc.)
- Date/time literals (DATE#, TOD#, DT#, LTIME#, S5TIME#, DTL#)
- WSTRING# and STRING# typed string literals
- C# char literal
- Time units with case-insensitive matching (T#1S, T#2s)

Updated constructs:
- CASE labels: comma-separated lists, string labels
- Function call parameters: interleaved input (:=) and output (=>) params
- FOR loop variable: accepts prefixed_identifier (#tempVar)
- Array bounds: accept string/identifier constants (Array[0.."MAX"])
- Author/Family values: accept unquoted text with hyphens/slashes

Known remaining issues (21 files, 10%):
- Triple-nested parentheses in expressions
- Some multi-line function call parameter patterns
- END_REGION with trailing region name
- Complex chained field access in assignments
2026-07-18 19:19:03 +02:00

1922 lines
32 KiB
JSON

[
{
"type": "array_access",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "lvalue",
"named": true
}
]
}
},
{
"type": "array_type",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "type",
"named": true
}
]
}
},
{
"type": "assignment",
"named": true,
"fields": {
"target": {
"multiple": false,
"required": true,
"types": [
{
"type": "lvalue",
"named": true
}
]
},
"value": {
"multiple": false,
"required": true,
"types": [
{
"type": "chained_assignment",
"named": true
},
{
"type": "expression",
"named": true
}
]
}
}
},
{
"type": "attribute",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute_value",
"named": true
},
{
"type": "identifier",
"named": true
}
]
}
},
{
"type": "attribute_list",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute",
"named": true
}
]
}
},
{
"type": "attribute_value",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "constant",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "string",
"named": true
}
]
}
},
{
"type": "binary_expression",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "operator",
"named": true
}
]
}
},
{
"type": "bit_access",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "lvalue",
"named": true
},
{
"type": "number",
"named": true
}
]
}
},
{
"type": "case_item",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "prefixed_identifier",
"named": true
},
{
"type": "range",
"named": true
},
{
"type": "statement",
"named": true
},
{
"type": "string",
"named": true
}
]
}
},
{
"type": "case_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "case_item",
"named": true
},
{
"type": "else_clause",
"named": true
},
{
"type": "expression",
"named": true
},
{
"type": "keyword",
"named": true
}
]
}
},
{
"type": "chained_assignment",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "chained_assignment",
"named": true
},
{
"type": "expression",
"named": true
},
{
"type": "lvalue",
"named": true
}
]
}
},
{
"type": "char_literal",
"named": true,
"fields": {}
},
{
"type": "continue_statement",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "keyword",
"named": true
}
]
}
},
{
"type": "data_block",
"named": true,
"fields": {
"associated": {
"multiple": false,
"required": false,
"types": [
{
"type": "string",
"named": true
}
]
},
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "string",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute_list",
"named": true
},
{
"type": "author_value",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "statement",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "title_statement",
"named": true
},
{
"type": "var_db_specific_declaration",
"named": true
},
{
"type": "var_declaration",
"named": true
}
]
}
},
{
"type": "else_clause",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "keyword",
"named": true
},
{
"type": "statement",
"named": true
}
]
}
},
{
"type": "elsif_clause",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "statement",
"named": true
}
]
}
},
{
"type": "empty_statement",
"named": true,
"fields": {}
},
{
"type": "exit_statement",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "keyword",
"named": true
}
]
}
},
{
"type": "expression",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "array_access",
"named": true
},
{
"type": "binary_expression",
"named": true
},
{
"type": "binary_number",
"named": true
},
{
"type": "bit_access",
"named": true
},
{
"type": "bool_literal",
"named": true
},
{
"type": "char_literal",
"named": true
},
{
"type": "date_literal",
"named": true
},
{
"type": "expression",
"named": true
},
{
"type": "field_access",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "hex_number",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "octal_number",
"named": true
},
{
"type": "prefixed_identifier",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "time_value",
"named": true
},
{
"type": "typed_int_literal",
"named": true
},
{
"type": "unary_expression",
"named": true
},
{
"type": "wstring_literal",
"named": true
}
]
}
},
{
"type": "fb_call",
"named": true,
"fields": {
"instance": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "prefixed_identifier",
"named": true
}
]
}
},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "fb_parameter_list",
"named": true
}
]
}
},
{
"type": "fb_parameter",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "expression",
"named": true
}
]
}
},
{
"type": "fb_parameter_list",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "fb_parameter",
"named": true
}
]
}
},
{
"type": "field_access",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "lvalue",
"named": true
},
{
"type": "prefixed_identifier",
"named": true
}
]
}
},
{
"type": "for_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "prefixed_identifier",
"named": true
},
{
"type": "statement",
"named": true
}
]
}
},
{
"type": "function",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "string",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute_list",
"named": true
},
{
"type": "author_value",
"named": true
},
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "statement",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "title_statement",
"named": true
},
{
"type": "type",
"named": true
},
{
"type": "var_constant_declaration",
"named": true
},
{
"type": "var_declaration",
"named": true
},
{
"type": "var_non_retain_declaration",
"named": true
},
{
"type": "var_retain_declaration",
"named": true
},
{
"type": "var_temp_declaration",
"named": true
}
]
}
},
{
"type": "function_block",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "string",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute_list",
"named": true
},
{
"type": "author_value",
"named": true
},
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "statement",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "title_statement",
"named": true
},
{
"type": "var_constant_declaration",
"named": true
},
{
"type": "var_db_specific_declaration",
"named": true
},
{
"type": "var_declaration",
"named": true
},
{
"type": "var_non_retain_declaration",
"named": true
},
{
"type": "var_retain_declaration",
"named": true
},
{
"type": "var_temp_declaration",
"named": true
}
]
}
},
{
"type": "function_call",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "method_callee",
"named": true
},
{
"type": "parameter_list",
"named": true
},
{
"type": "string",
"named": true
}
]
}
},
{
"type": "function_name",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "string",
"named": true
}
]
}
},
{
"type": "goto_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "keyword",
"named": true
}
]
}
},
{
"type": "if_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "else_clause",
"named": true
},
{
"type": "elsif_clause",
"named": true
},
{
"type": "expression",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "statement",
"named": true
}
]
}
},
{
"type": "lvalue",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "array_access",
"named": true
},
{
"type": "bit_access",
"named": true
},
{
"type": "field_access",
"named": true
},
{
"type": "function_name",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "prefixed_identifier",
"named": true
}
]
}
},
{
"type": "method_callee",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "lvalue",
"named": true
}
]
}
},
{
"type": "organization_block",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "string",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute_list",
"named": true
},
{
"type": "author_value",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "statement",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "title_statement",
"named": true
},
{
"type": "var_declaration",
"named": true
}
]
}
},
{
"type": "parameter",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "identifier",
"named": true
}
]
}
},
{
"type": "parameter_list",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "parameter",
"named": true
}
]
}
},
{
"type": "prefixed_identifier",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "prefix",
"named": true
}
]
}
},
{
"type": "range",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "number",
"named": true
}
]
}
},
{
"type": "ref_type",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "keyword",
"named": true
},
{
"type": "type",
"named": true
}
]
}
},
{
"type": "region_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "keyword",
"named": true
},
{
"type": "region_name",
"named": true
},
{
"type": "statement",
"named": true
}
]
}
},
{
"type": "repeat_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "statement",
"named": true
}
]
}
},
{
"type": "return_statement",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "keyword",
"named": true
}
]
}
},
{
"type": "source_file",
"named": true,
"root": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "bom",
"named": true
},
{
"type": "data_block",
"named": true
},
{
"type": "function",
"named": true
},
{
"type": "function_block",
"named": true
},
{
"type": "organization_block",
"named": true
},
{
"type": "statement",
"named": true
},
{
"type": "type_definition",
"named": true
}
]
}
},
{
"type": "statement",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "assignment",
"named": true
},
{
"type": "case_statement",
"named": true
},
{
"type": "continue_statement",
"named": true
},
{
"type": "empty_statement",
"named": true
},
{
"type": "exit_statement",
"named": true
},
{
"type": "fb_call",
"named": true
},
{
"type": "for_statement",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "goto_statement",
"named": true
},
{
"type": "if_statement",
"named": true
},
{
"type": "region_statement",
"named": true
},
{
"type": "repeat_statement",
"named": true
},
{
"type": "return_statement",
"named": true
},
{
"type": "var_constant_declaration",
"named": true
},
{
"type": "var_db_specific_declaration",
"named": true
},
{
"type": "var_declaration",
"named": true
},
{
"type": "var_non_retain_declaration",
"named": true
},
{
"type": "var_retain_declaration",
"named": true
},
{
"type": "var_temp_declaration",
"named": true
},
{
"type": "while_statement",
"named": true
}
]
}
},
{
"type": "string",
"named": true,
"fields": {}
},
{
"type": "string_type",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "number",
"named": true
},
{
"type": "type_builtin",
"named": true
}
]
}
},
{
"type": "struct_initializer",
"named": true,
"fields": {
"name": {
"multiple": true,
"required": false,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "struct_initializer",
"named": true
}
]
}
},
{
"type": "struct_type",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "type",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "array_type",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "ref_type",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "string_type",
"named": true
},
{
"type": "struct_type",
"named": true
},
{
"type": "type_builtin",
"named": true
}
]
}
},
{
"type": "type_builtin",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "type_builtin",
"named": true
}
]
}
},
{
"type": "type_definition",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
},
{
"type": "string",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute_list",
"named": true
},
{
"type": "author_value",
"named": true
},
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "title_statement",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "unary_expression",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "operator",
"named": true
}
]
}
},
{
"type": "var_constant_declaration",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "var_db_specific_declaration",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "var_declaration",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "var_item",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
},
"type": {
"multiple": false,
"required": true,
"types": [
{
"type": "type",
"named": true
}
]
}
},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "attribute_list",
"named": true
},
{
"type": "expression",
"named": true
},
{
"type": "struct_initializer",
"named": true
}
]
}
},
{
"type": "var_non_retain_declaration",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "var_retain_declaration",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "var_temp_declaration",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "var_item",
"named": true
}
]
}
},
{
"type": "while_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "statement",
"named": true
}
]
}
},
{
"type": "\"",
"named": false
},
{
"type": "\"\"",
"named": false
},
{
"type": "%",
"named": false
},
{
"type": "&=",
"named": false
},
{
"type": "'",
"named": false
},
{
"type": "''",
"named": false
},
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "*",
"named": false
},
{
"type": "*=",
"named": false
},
{
"type": "+",
"named": false
},
{
"type": "+=",
"named": false
},
{
"type": ",",
"named": false
},
{
"type": "-",
"named": false
},
{
"type": "-=",
"named": false
},
{
"type": ".",
"named": false
},
{
"type": "..",
"named": false
},
{
"type": "/",
"named": false
},
{
"type": "/=",
"named": false
},
{
"type": ":",
"named": false
},
{
"type": ":=",
"named": false
},
{
"type": ";",
"named": false
},
{
"type": "<",
"named": false
},
{
"type": "<=",
"named": false
},
{
"type": "<>",
"named": false
},
{
"type": "=",
"named": false
},
{
"type": "=>",
"named": false
},
{
"type": ">",
"named": false
},
{
"type": ">=",
"named": false
},
{
"type": "C#",
"named": false
},
{
"type": "[",
"named": false
},
{
"type": "]",
"named": false
},
{
"type": "^=",
"named": false
},
{
"type": "author_value",
"named": true
},
{
"type": "binary_number",
"named": true
},
{
"type": "block_comment",
"named": true,
"extra": true
},
{
"type": "bom",
"named": true
},
{
"type": "bool_literal",
"named": true
},
{
"type": "c_style_comment",
"named": true,
"extra": true
},
{
"type": "constant",
"named": true
},
{
"type": "date_literal",
"named": true
},
{
"type": "hex_number",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "keyword",
"named": true
},
{
"type": "line_comment",
"named": true,
"extra": true
},
{
"type": "number",
"named": true
},
{
"type": "octal_number",
"named": true
},
{
"type": "operator",
"named": true
},
{
"type": "prefix",
"named": true
},
{
"type": "region_name",
"named": true
},
{
"type": "time_value",
"named": true
},
{
"type": "title_statement",
"named": true
},
{
"type": "typed_int_literal",
"named": true
},
{
"type": "wstring_literal",
"named": true
},
{
"type": "{",
"named": false
},
{
"type": "|=",
"named": false
},
{
"type": "}",
"named": false
}
]