|
| 1 | +{ |
| 2 | + "name": "Structured Text (IEC 61131-3)", |
| 3 | + "scopeName": "source.st", |
| 4 | + "fileTypes": ["st"], |
| 5 | + "patterns": [ |
| 6 | + { "include": "#comments" }, |
| 7 | + { "include": "#strings" }, |
| 8 | + { "include": "#literals" }, |
| 9 | + { |
| 10 | + "name": "keyword.control.st", |
| 11 | + "match": "(?i)\\b(?:IF|THEN|ELSIF|ELSE|END_IF|CASE|OF|END_CASE|FOR|TO|BY|DO|END_FOR|WHILE|END_WHILE|REPEAT|UNTIL|END_REPEAT|EXIT|CONTINUE|RETURN)\\b" |
| 12 | + }, |
| 13 | + { |
| 14 | + "name": "keyword.declaration.st", |
| 15 | + "match": "(?i)\\b(?:PROGRAM|END_PROGRAM|FUNCTION|END_FUNCTION|FUNCTION_BLOCK|END_FUNCTION_BLOCK|VAR|VAR_INPUT|VAR_OUTPUT|VAR_IN_OUT|VAR_TEMP|VAR_GLOBAL|VAR_EXTERNAL|VAR_ACCESS|VAR_CONFIG|VAR_STAT|END_VAR|CONSTANT|RETAIN|NON_RETAIN|PERSISTENT|AT|TYPE|END_TYPE|STRUCT|END_STRUCT|ARRAY|POINTER|REFERENCE|REF_TO|CONFIGURATION|END_CONFIGURATION|RESOURCE|END_RESOURCE|TASK|WITH|ON|READ_ONLY|READ_WRITE|R_EDGE|F_EDGE|CLASS|END_CLASS|METHOD|END_METHOD|INTERFACE|END_INTERFACE|PROPERTY|END_PROPERTY|EXTENDS|IMPLEMENTS|PUBLIC|PRIVATE|PROTECTED|INTERNAL|ABSTRACT|FINAL|OVERRIDE|THIS|SUPER)\\b" |
| 16 | + }, |
| 17 | + { |
| 18 | + "name": "storage.type.st", |
| 19 | + "match": "(?i)\\b(?:BOOL|SINT|INT|DINT|LINT|USINT|UINT|UDINT|ULINT|BYTE|WORD|DWORD|LWORD|REAL|LREAL|TIME|LTIME|DATE|LDATE|TIME_OF_DAY|LTIME_OF_DAY|TOD|LTOD|DATE_AND_TIME|LDATE_AND_TIME|DT|LDT|STRING|WSTRING|CHAR|WCHAR|ANY|ANY_DERIVED|ANY_ELEMENTARY|ANY_MAGNITUDE|ANY_NUM|ANY_REAL|ANY_INT|ANY_BIT|ANY_STRING|ANY_DATE)\\b" |
| 20 | + }, |
| 21 | + { |
| 22 | + "name": "keyword.operator.st", |
| 23 | + "match": "(?i)\\b(?:AND|OR|XOR|NOT|MOD|AND_THEN|OR_ELSE)\\b|:=|=>|<>|<=|>=|\\*\\*|[-+*/=<>&^]" |
| 24 | + }, |
| 25 | + { |
| 26 | + "name": "variable.other.address.st", |
| 27 | + "match": "(?i)%[IQM](?:[XBWDL])?(?:[0-9]+(?:\\.[0-9]+)*|\\*)" |
| 28 | + }, |
| 29 | + { |
| 30 | + "name": "entity.name.function.st", |
| 31 | + "match": "\\b[A-Za-z_][A-Za-z_0-9]*\\b(?=\\s*\\()" |
| 32 | + }, |
| 33 | + { |
| 34 | + "name": "punctuation.separator.st", |
| 35 | + "match": "\\.\\.|[;:,.]" |
| 36 | + } |
| 37 | + ], |
| 38 | + "repository": { |
| 39 | + "comments": { |
| 40 | + "patterns": [ |
| 41 | + { |
| 42 | + "name": "comment.line.double-slash.st", |
| 43 | + "begin": "//", |
| 44 | + "end": "$" |
| 45 | + }, |
| 46 | + { "include": "#blockComment" } |
| 47 | + ] |
| 48 | + }, |
| 49 | + "blockComment": { |
| 50 | + "name": "comment.block.st", |
| 51 | + "begin": "\\(\\*", |
| 52 | + "end": "\\*\\)", |
| 53 | + "patterns": [{ "include": "#blockComment" }] |
| 54 | + }, |
| 55 | + "strings": { |
| 56 | + "patterns": [ |
| 57 | + { |
| 58 | + "name": "string.quoted.single.st", |
| 59 | + "begin": "(?i)(?:\\b(?:STRING|CHAR)#)?'", |
| 60 | + "end": "'", |
| 61 | + "patterns": [ |
| 62 | + { |
| 63 | + "name": "constant.character.escape.st", |
| 64 | + "match": "(?i)\\$(?:[0-9a-f]{2}|[$'LNPRT])" |
| 65 | + } |
| 66 | + ] |
| 67 | + }, |
| 68 | + { |
| 69 | + "name": "string.quoted.double.st", |
| 70 | + "begin": "(?i)(?:\\b(?:WSTRING|WCHAR)#)?\"", |
| 71 | + "end": "\"", |
| 72 | + "patterns": [ |
| 73 | + { |
| 74 | + "name": "constant.character.escape.st", |
| 75 | + "match": "(?i)\\$(?:[0-9a-f]{4}|[$\"LNPRT])" |
| 76 | + } |
| 77 | + ] |
| 78 | + } |
| 79 | + ] |
| 80 | + }, |
| 81 | + "literals": { |
| 82 | + "patterns": [ |
| 83 | + { |
| 84 | + "name": "constant.language.boolean.st", |
| 85 | + "match": "(?i)\\b(?:BOOL#(?:TRUE|FALSE|[01])|TRUE|FALSE)\\b" |
| 86 | + }, |
| 87 | + { |
| 88 | + "name": "constant.numeric.time.st", |
| 89 | + "match": "(?i)\\b(?:LTIME|TIME|LT|T)#[+-]?(?:[0-9]+(?:\\.[0-9]+)?(?:ms|us|ns|d|h|m|s)_?)+\\b" |
| 90 | + }, |
| 91 | + { |
| 92 | + "name": "constant.numeric.date.st", |
| 93 | + "match": "(?i)\\b(?:LDATE_AND_TIME|DATE_AND_TIME|LDT|DT)#[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}-[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}(?:\\.[0-9]+)?\\b|\\b(?:LTIME_OF_DAY|TIME_OF_DAY|LTOD|TOD)#[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}(?:\\.[0-9]+)?\\b|\\b(?:LDATE|DATE|LD|D)#[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\b" |
| 94 | + }, |
| 95 | + { |
| 96 | + "name": "constant.numeric.st", |
| 97 | + "match": "(?i)\\b(?:(?:SINT|INT|DINT|LINT|USINT|UINT|UDINT|ULINT|BYTE|WORD|DWORD|LWORD|REAL|LREAL)#[-+]?)?(?:16#[0-9a-f]+(?:_[0-9a-f]+)*|8#[0-7]+(?:_[0-7]+)*|2#[01]+(?:_[01]+)*|[0-9]+(?:_[0-9]+)*(?:\\.(?!\\.)(?:[0-9]+(?:_[0-9]+)*)?)?(?:e[-+]?[0-9]+(?:_[0-9]+)*)?)(?![\\w])" |
| 98 | + } |
| 99 | + ] |
| 100 | + } |
| 101 | + } |
| 102 | +} |
0 commit comments