From 0110fa4d053d393a2233f485ae1324419d535fb3 Mon Sep 17 00:00:00 2001 From: Emmanuel Thomas Date: Mon, 9 Mar 2026 18:39:35 +0100 Subject: [PATCH] feat: add signed type and const array support to SDL parser - Add `signed` keyword support to ElementaryType definition - Add `const` qualifier support to ArrayDefinition rule (was missing) - Update AST mapping files for new token types --- grammar/sdl.lezer.grammar | 4 +- ...ray-dimension-kind-by-token-type-id-map.ts | 1 + .../class-id-kind-by-token-type-id-map.ts | 1 + .../expression-kind-by-token-type-id-map.ts | 1 + .../util/node-kind-by-token-type-id-map.ts | 1 + .../statement-kind-by-token-type-id-map.ts | 1 + ...tring-literal-kind-by-token-type-id-map.ts | 1 + .../util/token-kind-by-token-type-id-map.ts | 1 + src/ast/node/enum/token-kind.ts | 1 + src/completion/completion-rules.ts | 1 + src/completion/rules/abstract-types.ts | 1 + src/lezer/parser.terms.ts | 212 +++++++++--------- src/lezer/parser.ts | 71 ++---- .../props/style-tags-node-prop-source.ts | 1 + .../props/syntactic-token-node-prop-source.ts | 1 + .../const-arrays-fixed.sdl | 30 +++ .../signed-types-fixed.sdl | 47 ++++ 17 files changed, 214 insertions(+), 162 deletions(-) create mode 100644 tests/sample-specifications/const-arrays-fixed.sdl create mode 100644 tests/sample-specifications/signed-types-fixed.sdl diff --git a/grammar/sdl.lezer.grammar b/grammar/sdl.lezer.grammar index 794ead9..cfee136 100644 --- a/grammar/sdl.lezer.grammar +++ b/grammar/sdl.lezer.grammar @@ -351,7 +351,7 @@ AlignedModifier { } ElementaryType { - keyword<"int"> | keyword<"unsigned"> keyword<"int"> | keyword<"float"> | keyword<"bit"> + keyword<"int"> | keyword<"signed"> keyword<"int"> | keyword<"unsigned"> keyword<"int"> | keyword<"float"> | keyword<"bit"> } LengthAttribute { @@ -510,7 +510,7 @@ ImplicitArrayDimension { } ArrayDefinition { - (keyword<"reserved"> | keyword<"legacy">)? AlignedModifier? ((ElementaryType LengthAttribute) | Identifier) Identifier (ImplicitArrayDimension | (ExplicitArrayDimension | PartialArrayDimension)+) Semicolon + (keyword<"reserved"> | keyword<"legacy"> | keyword<"const">)? AlignedModifier? ((ElementaryType LengthAttribute) | Identifier) Identifier (ImplicitArrayDimension | (ExplicitArrayDimension | PartialArrayDimension)+) Semicolon } diff --git a/src/ast/build/util/array-dimension-kind-by-token-type-id-map.ts b/src/ast/build/util/array-dimension-kind-by-token-type-id-map.ts index 041d4e0..a92c184 100644 --- a/src/ast/build/util/array-dimension-kind-by-token-type-id-map.ts +++ b/src/ast/build/util/array-dimension-kind-by-token-type-id-map.ts @@ -148,6 +148,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.Subtraction: case TokenTypeId.UnaryNegation: case TokenTypeId.UnaryPlus: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/ast/build/util/class-id-kind-by-token-type-id-map.ts b/src/ast/build/util/class-id-kind-by-token-type-id-map.ts index 1ecbe13..d8757e4 100644 --- a/src/ast/build/util/class-id-kind-by-token-type-id-map.ts +++ b/src/ast/build/util/class-id-kind-by-token-type-id-map.ts @@ -141,6 +141,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.Subtraction: case TokenTypeId.UnaryNegation: case TokenTypeId.UnaryPlus: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/ast/build/util/expression-kind-by-token-type-id-map.ts b/src/ast/build/util/expression-kind-by-token-type-id-map.ts index 7d8169a..0efed4b 100644 --- a/src/ast/build/util/expression-kind-by-token-type-id-map.ts +++ b/src/ast/build/util/expression-kind-by-token-type-id-map.ts @@ -149,6 +149,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.Subtraction: case TokenTypeId.UnaryNegation: case TokenTypeId.UnaryPlus: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/ast/build/util/node-kind-by-token-type-id-map.ts b/src/ast/build/util/node-kind-by-token-type-id-map.ts index eaf37d1..4574ba8 100644 --- a/src/ast/build/util/node-kind-by-token-type-id-map.ts +++ b/src/ast/build/util/node-kind-by-token-type-id-map.ts @@ -183,6 +183,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.Subtraction: case TokenTypeId.UnaryNegation: case TokenTypeId.UnaryPlus: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/ast/build/util/statement-kind-by-token-type-id-map.ts b/src/ast/build/util/statement-kind-by-token-type-id-map.ts index 3d5e9c9..449b770 100644 --- a/src/ast/build/util/statement-kind-by-token-type-id-map.ts +++ b/src/ast/build/util/statement-kind-by-token-type-id-map.ts @@ -191,6 +191,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.Subtraction: case TokenTypeId.UnaryNegation: case TokenTypeId.UnaryPlus: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/ast/build/util/string-literal-kind-by-token-type-id-map.ts b/src/ast/build/util/string-literal-kind-by-token-type-id-map.ts index cd4e2b5..2928730 100644 --- a/src/ast/build/util/string-literal-kind-by-token-type-id-map.ts +++ b/src/ast/build/util/string-literal-kind-by-token-type-id-map.ts @@ -143,6 +143,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.Subtraction: case TokenTypeId.UnaryNegation: case TokenTypeId.UnaryPlus: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/ast/build/util/token-kind-by-token-type-id-map.ts b/src/ast/build/util/token-kind-by-token-type-id-map.ts index 6d896ec..0d385fa 100644 --- a/src/ast/build/util/token-kind-by-token-type-id-map.ts +++ b/src/ast/build/util/token-kind-by-token-type-id-map.ts @@ -249,6 +249,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.UnaryPlus: tokenKindByTokenTypeId.set(tokenTypeId, TokenKind.UNARY_PLUS); break; + case TokenTypeId.signed: case TokenTypeId.unsigned: tokenKindByTokenTypeId.set(tokenTypeId, TokenKind.UNSIGNED); break; diff --git a/src/ast/node/enum/token-kind.ts b/src/ast/node/enum/token-kind.ts index 2e32b80..b3cc8af 100644 --- a/src/ast/node/enum/token-kind.ts +++ b/src/ast/node/enum/token-kind.ts @@ -76,6 +76,7 @@ export enum TokenKind { SWITCH, UNARY_NEGATION, UNARY_PLUS, + SIGNED, UNSIGNED, UTF_PREFIX, UTF_STRING, diff --git a/src/completion/completion-rules.ts b/src/completion/completion-rules.ts index 7698888..53cd730 100644 --- a/src/completion/completion-rules.ts +++ b/src/completion/completion-rules.ts @@ -379,6 +379,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.Subtraction: case TokenTypeId.UnaryNegation: case TokenTypeId.UnaryPlus: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/completion/rules/abstract-types.ts b/src/completion/rules/abstract-types.ts index b2e7c1d..d84bf10 100644 --- a/src/completion/rules/abstract-types.ts +++ b/src/completion/rules/abstract-types.ts @@ -158,6 +158,7 @@ Object.values(TokenTypeId).forEach((tokenTypeId) => { case TokenTypeId.lengthof: case TokenTypeId.map: case TokenTypeId.reserved: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.utf16string: case TokenTypeId.utf8list: diff --git a/src/lezer/parser.terms.ts b/src/lezer/parser.terms.ts index f406035..2ad4f0f 100644 --- a/src/lezer/parser.terms.ts +++ b/src/lezer/parser.terms.ts @@ -1,5 +1,6 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. -export const Whitespace = 1, +export const + Whitespace = 1, Comment = 2, Specification = 3, CloseBrace = 4, @@ -23,107 +24,108 @@ export const Whitespace = 1, Parameter = 22, ElementaryType = 23, int = 24, - unsigned = 25, - float = 26, - bit = 27, - Comma = 28, - ExtendsModifier = 29, - _extends = 30, - ParameterValueList = 31, - BinaryExpression = 32, - Multiplication = 33, - Division = 34, - Modulus = 35, - Addition = 36, - Subtraction = 37, - BitwiseShiftLeft = 38, - BitwiseShiftRight = 39, - RelationalLessThan = 40, - RelationalLessThanOrEqual = 41, - RelationalGreaterThan = 42, - RelationalGreaterThanOrEqual = 43, - RelationalEqual = 44, - RelationalNotEqual = 45, - BitwiseAnd = 46, - BitwiseOr = 47, - LogicalAnd = 48, - LogicalOr = 49, - UnaryExpression = 50, - CloseBracket = 51, - OpenBracket = 52, - ArrayElementAccess = 53, - ClassMemberAccess = 54, - Period = 55, - PostfixIncrement = 56, - PostfixDecrement = 57, - UnaryPlus = 58, - UnaryNegation = 59, - LengthofExpression = 60, - lengthof = 61, - BinaryLiteral = 62, - HexadecimalLiteral = 63, - MultipleCharacterLiteral = 64, - SingleQuote = 65, - MultipleCharacterLiteralCharacters = 66, - DecimalLiteral = 67, - FloatingPointLiteral = 68, - BitModifier = 69, - Colon = 70, - Assignment = 71, - ExtendedClassIdRange = 72, - ClassId = 73, - ClassIdRange = 74, - RangeOperator = 75, - OpenBrace = 76, - CompoundStatement = 77, - IfStatement = 78, - _if = 79, - _else = 80, - SwitchStatement = 81, - _switch = 82, - CaseClause = 83, - _case = 84, - _break = 85, - Semicolon = 86, - DefaultClause = 87, - _default = 88, - ForStatement = 89, - _for = 90, - AssignmentExpression = 91, - ComputedElementaryTypeDefinition = 92, - computed = 93, - _const = 94, - DoStatement = 95, - _do = 96, - _while = 97, - WhileStatement = 98, - ExpressionStatement = 99, - ElementaryTypeDefinition = 100, - reserved = 101, - legacy = 102, - LengthAttribute = 103, - LookAhead = 104, - MapDefinition = 105, - ClassDefinition = 106, - StringDefinition = 107, - base64string = 108, - Base64StringLiteral = 109, - DoubleQuote = 110, - Base64StringLiteralCharacters = 111, - utf16string = 112, - UtfStringLiteral = 113, - UtfPrefix = 114, - UtfStringLiteralCharacters = 115, - utf8string = 116, - utf8list = 117, - utfstring = 118, - ArrayDefinition = 119, - ImplicitArrayDimension = 120, - ExplicitArrayDimension = 121, - PartialArrayDimension = 122, - ComputedArrayDefinition = 123, - MapDeclaration = 124, - map = 125, - MapEntry = 126, - AggregateOutputValue = 127, - ElementaryTypeOutputValue = 128; + signed = 25, + unsigned = 26, + float = 27, + bit = 28, + Comma = 29, + ExtendsModifier = 30, + _extends = 31, + ParameterValueList = 32, + BinaryExpression = 33, + Multiplication = 34, + Division = 35, + Modulus = 36, + Addition = 37, + Subtraction = 38, + BitwiseShiftLeft = 39, + BitwiseShiftRight = 40, + RelationalLessThan = 41, + RelationalLessThanOrEqual = 42, + RelationalGreaterThan = 43, + RelationalGreaterThanOrEqual = 44, + RelationalEqual = 45, + RelationalNotEqual = 46, + BitwiseAnd = 47, + BitwiseOr = 48, + LogicalAnd = 49, + LogicalOr = 50, + UnaryExpression = 51, + CloseBracket = 52, + OpenBracket = 53, + ArrayElementAccess = 54, + ClassMemberAccess = 55, + Period = 56, + PostfixIncrement = 57, + PostfixDecrement = 58, + UnaryPlus = 59, + UnaryNegation = 60, + LengthofExpression = 61, + lengthof = 62, + BinaryLiteral = 63, + HexadecimalLiteral = 64, + MultipleCharacterLiteral = 65, + SingleQuote = 66, + MultipleCharacterLiteralCharacters = 67, + DecimalLiteral = 68, + FloatingPointLiteral = 69, + BitModifier = 70, + Colon = 71, + Assignment = 72, + ExtendedClassIdRange = 73, + ClassId = 74, + ClassIdRange = 75, + RangeOperator = 76, + OpenBrace = 77, + CompoundStatement = 78, + IfStatement = 79, + _if = 80, + _else = 81, + SwitchStatement = 82, + _switch = 83, + CaseClause = 84, + _case = 85, + _break = 86, + Semicolon = 87, + DefaultClause = 88, + _default = 89, + ForStatement = 90, + _for = 91, + AssignmentExpression = 92, + ComputedElementaryTypeDefinition = 93, + computed = 94, + _const = 95, + DoStatement = 96, + _do = 97, + _while = 98, + WhileStatement = 99, + ExpressionStatement = 100, + ElementaryTypeDefinition = 101, + reserved = 102, + legacy = 103, + LengthAttribute = 104, + LookAhead = 105, + MapDefinition = 106, + ClassDefinition = 107, + StringDefinition = 108, + base64string = 109, + Base64StringLiteral = 110, + DoubleQuote = 111, + Base64StringLiteralCharacters = 112, + utf16string = 113, + UtfStringLiteral = 114, + UtfPrefix = 115, + UtfStringLiteralCharacters = 116, + utf8string = 117, + utf8list = 118, + utfstring = 119, + ArrayDefinition = 120, + ImplicitArrayDimension = 121, + ExplicitArrayDimension = 122, + PartialArrayDimension = 123, + ComputedArrayDefinition = 124, + MapDeclaration = 125, + map = 126, + MapEntry = 127, + AggregateOutputValue = 128, + ElementaryTypeOutputValue = 129 diff --git a/src/lezer/parser.ts b/src/lezer/parser.ts index 43f9d0f..d472b4d 100644 --- a/src/lezer/parser.ts +++ b/src/lezer/parser.ts @@ -1,63 +1,24 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. -import { LRParser } from "@lezer/lr"; -import { defaultContextTracker } from "./context-tracker.ts"; -const spec_Identifier = { - __proto__: null, - aligned: 16, - expandable: 34, - abstract: 38, - class: 40, - int: 48, - unsigned: 50, - float: 52, - bit: 54, - extends: 60, - lengthof: 122, - if: 158, - else: 160, - switch: 164, - case: 168, - break: 170, - default: 176, - for: 180, - computed: 186, - const: 188, - do: 192, - while: 194, - reserved: 202, - legacy: 204, - base64string: 216, - utf16string: 224, - utf8string: 232, - utf8list: 234, - utfstring: 236, - map: 250, -}; +import {LRParser} from "@lezer/lr" +import {defaultContextTracker} from "./context-tracker.ts" +const spec_Identifier = {__proto__:null,aligned:16, expandable:34, abstract:38, class:40, int:48, signed:50, unsigned:52, float:54, bit:56, extends:62, lengthof:124, if:160, else:162, switch:166, case:170, break:172, default:178, for:182, computed:188, const:190, do:194, while:196, reserved:204, legacy:206, base64string:218, utf16string:226, utf8string:234, utf8list:236, utfstring:238, map:252} export const parser = LRParser.deserialize({ version: 14, - states: - "!.fQYQPOOOOQO'#FR'#FRQYQPOOOnQPO'#CbO!lQPO'#ClO!wQPO'#E[O#YQPO'#CaO#_QPO'#CaO#dQPO'#CaO#lQPO'#CaO#wQPO'#E|OOQO-E9P-E9PO#|QQO,58|O$_QPO,59WOOQO'#Cs'#CsO$dQPO'#CsO$iQPO,5:vO$nQPO,5:vO$|QPO,58{O%[QPO,58{O%aQPO,58{O%fQPO,58{O%nQPO,5;hOOQO'#Fe'#FeO%sQPO1G.hO%xQPO1G.rOOQO,59_,59_O%}QPO1G0bO&VQPO1G0bO&[QPO'#CqO&mQPO'#CyO&rQPO'#DsO(zQPO1G.gO)RQPO1G.gO)WQPO1G.gO)`QPO1G.gO)kQPO1G.gO)yQPO1G.gO*OQPO1G.gO*TQPO1G1SOOQO7+$S7+$SOOQO7+$^7+$^OOQO7+%|7+%|O*fQPO7+%|O+ZQPO7+%|O+cQPO'#CrO+hQPO'#FfO+pQPO,59]O+uQPO,59eO,QQPO,5:_O-mQQO'#EcOOQO'#Fq'#FqO-tQSO'#FTO-|QQO'#DnOOQO'#Fr'#FrO*fQPO'#D`OOQO'#D`'#D`O/vQWO'#D`O*fQPO'#D`OOQO'#Fh'#FhO1dQPO'#D{O1kQPO'#EcO1pQPO'#EdO2gQPO'#EkOOQO'#Fv'#FvO2nQPO'#EkOOQO'#Fu'#FuOOQO'#FX'#FXO2sQPO7+$RO2zQPO'#DjO3PQPO'#D|O3UQPO'#EPO!wQPO'#E[O3ZQPO'#EXO3`QPO'#E_O3eQPO'#EbO3jQPO'#EkO3qQPO'#EkO4OQPO'#EkO4]QPO'#FwO4bQPO'#FzO4gQPO'#F}O4lQPO'#GOOOQO7+$R7+$RO2sQPO7+$RO4qQPO7+$RO4vQPO7+$RO5OQPO7+$RO5ZQPO7+$RO5iQPO7+$RO5nQPO7+&nO7WQQO<OQQO'#FgO>YQPO,59gO>_QPO7+%eO@QQQO1G/SO@_QQO1G/SOB]QQO1G/SOBgQQO1G/SODbQQO1G/SODlQQO1G/SOFTQQO1G/SOFqQQO,59}OOQO,5:O,5:OOFxQQO1G0aOOQO-E9S-E9SOOQO1G1Z1G1ZOGSQPO1G0oOOQO1G0p1G0pOGXQPO1G0pOHRQPO'#ExOOQO'#F_'#F_OH]QPO1G0}OH`QPO1G0}OOQO1G/f1G/fOOQO1G0R1G0ROHeQQO,5;ROHlQPO1G0jOHwQPO1G0jOH|QPO1G0jOOQO1G0q1G0qOIUQPO1G0}OIZQQO1G/pOIbQQO1G0SOIiQQO1G0VOIpQPO1G0bO,VQQO'#EZOI{QPO1G0_OJQQPO1G0_OJXQPO1G0eOJ^QQO1G0hOJeQPO1G0jO:mQPO1G0jOJmQPO1G0qOJrQPO1G0oO:mQPO1G0jOJwQPO1G0}O1xQPO1G0qOJ|QPO1G0pOKXQPO1G1}OK^QQO1G2QOK^QQO1G2TOK^QQO1G2UOOQOAN=XAN=XOKcQPOAN=XOKcQPOAN=XOKjQPOAN=XOKoQPOAN=XOKwQPOAN=XOLSQPOAN?tOOQOG24nG24nO*fQPO'#FVOLXQPO,5kAN>kO!$sQPOAN>kO!$xQPO<tOOQO'#FY'#FYO!+pQPOAN>wO!+{QPO'#ERO!,aQPO'#EVOOQOAN>wAN>wO!,fQPOAN>wO!,kQPOAN?PO!,rQQOAN?PO&wQPOAN?PO!,yQPOAN?POOQOAN?PAN?PO!-OQPOAN?VO!-TQPOAN?[O!-]QPOAN?aO!-bQPOAN?oO!-eQPOAN?oO!-jQPOAN?[OOQO-E9Y-E9YO!-oQ`O,5;ZOOQO,5;Z,5;ZOOQO1G1a1G1aOOQO'#F^'#F^O!-wQpO'#EsO!.SQPO1G1cOOQO!$'Ky!$'KyO!.XQPO!$'KyO!.XQPO!$'KyO!.`QPO'#FPOOQO1G1U1G1UOOQO,5;|,5;|OOQO-E9`-E9`OOQO1G0O1G0OO!.sQPO,5;rOOQO,5;r,5;rOOQO-E9U-E9UOOQOLD)qLD)qOOQO<yO!5UQPOAN>yOOQOAN>yAN>yOOQO!.K9S!.K9SO!5ZQQO!.K9SO!5bQPOG24eOOQOG24eG24eOOQO!4/.n!4/.nOOQOLD*PLD*P", - stateData: - "!5u~OPOSQOS~OWROaSOcVOdUO#PTO#qYO~OX[OaUXcUXdUXVUXhUXiUXjUXkUX#`UX#dUX#hUX#iUX#jUX~OX]Oc`Xd`X~Oh^Oi_Oj^Ok^O#QaO~OVbO~OdcO~OcdOdcO~OaSOcdOdcO~OVfO~OYgOZgO[gO]gO^gO~ObiO~OhjO~OVkO~Oh^Oi_Oj^Ok^O~OXmOnnO!hoO!npO~OVtO~OduO~OcvOduO~OXwO~O_xO~O_yO~O!i{O!xzO~OV|O~OV}Oh^Oi_Oj^Ok^O~OV!QO~Ok!RO~OV!ZOWROX![Ob!WOh^Oi_Oj^Ok^O![!TO!]!TO!_!gO!`!WO!a!WO!c!UO!e!WO!f!WO!n!^O!q!hO!t!iO!|!kO#P!jO#Q!nO#S!lO#T!mO#X!oO#Y!pO#`!qO#d!rO#h!sO#i!sO#j!tO~OS!uO~P&wO!n!vO~O!hoO!n!vO~OnnO!hoO!n!vO~OXmOnnO!hoO!n!vO~OV!zO~Od!{O~OV!|Oh^Oi_Oj^Ok^O~OV!YOX![Ob!WO![!TO!]!TO!_!gO!`!WO!a!WO!c!UO!e!WO!f!WO~O!i#PO!x#OO~OV#QO~Ol#RO_$YX~O_#TO~OX#UO!hma!nma~OX#WO~Oq#XOr#XOs#XOt#YOu#YOv#ZOw#ZOx#[Oy#[Oz#[O{#[O|#]O}#]O!O#^O!P#^O!Q#_O!R#_O!U#gO!X#hO!Y#iO!Z#iO!i#kO~O!x#lO~P,VO$g#mO!c!dP~O!c!UOq!bXr!bXs!bXt!bXu!bXv!bXw!bXx!bXy!bXz!bX{!bX|!bX}!bX!O!bX!P!bX!Q!bX!R!bX!U!bX!X!bX!Y!bX!Z!bX!i!bX!x!bX_!bXl!bX!T!bX!m!bX~OV#sOq!SXr!SXs!SXt!SXu!SXv!SXw!SXx!SXy!SXz!SX{!SX|!SX}!SX!O!SX!P!SX!Q!SX!R!SX!U!SX!X!SX!Y!SX!Z!SX!i!SX!x!SX~OS#uO~P&wO!x#lO~OX#wOx#rO~Oh^Oi_Oj^Ok^O#`!qO#d!rO#h!sO#i!sO#j!tO~OV#{O~P1xO!x#|O~OS$OO~P&wOX$PO~OX$QO~OX$RO~OX$TO~O!n!^O~OX$VO~OWRO~P1xOV$]OWRO#Q$[O~P1xOV$^OWRO#Q$[O~P1xOV$_O~OV$`O~OV$aO~OV$bO~O!n$dO~O!hoO!n$dO~OnnO!hoO!n$dO~OXmOnnO!hoO!n$dO~OV$hO~O_$iO~Oq#XOr#XOs#XOt#YOu#YOv#ZOw#ZOx#[Oy#[Oz#[O{#[O|#]O}#]O!O#^O!P#^O!Q#_O!R#_O!U#gO!X#hO!Y#iO!Z#iO~O!x$jO~P5sOl#RO_$Ya~Ob$pO~OV$yO~O$g#mO!c!dX~O!c$|O~O!U#gO!X#hO!Y#iO!Z#iOq!Sar!Sas!Sat!Sau!Sav!Saw!Sax!Say!Saz!Sa{!Sa|!Sa}!Sa!O!Sa!P!Sa!Q!Sa!R!Sa!i!Sa!x!Sa_!Sal!Sa!T!Sa!m!Sa~OV$}O~OX#UO!U%QO!x%OO~O_%UO~P5sOS%VO~P&wOV%XO#[%YO~OX#wO~O!x%[O~OV%]O~OV%aO~O!x%dO#PTO~P*fO#T%eO~OX#wOx%jO~OV%lO~P1xOV%]Ox%jO~OV%nOx%jO~O!i%oO!x$ka~O!i%pO!x$na~O!i%qO!x$qa~O!i%rO!x$ra~OS%sO~P&wO!n%uO~O!hoO!n%uO~OnnO!hoO!n%uO~OXmOnnO!hoO!n%uO~O!n%yO~O!x%zO~P5sOl%{O_$ZX~P5sO_%}O~O_&OO~O!U#gO!X#hO!Y#iO!Z#iOtpiupivpiwpixpiypizpi{pi|pi}pi!Opi!Ppi!Qpi!Rpi!ipi!xpi_pilpi!Tpi!mpi~Oqpirpispi~P>dOq#XOr#XOs#XO~P>dOq#XOr#XOs#XOt#YOu#YO!U#gO!X#hO!Y#iO!Z#iOxpiypizpi{pi|pi}pi!Opi!Ppi!Qpi!Rpi!ipi!xpi_pilpi!Tpi!mpi~Ovpiwpi~P@lOv#ZOw#ZO~P@lOq#XOr#XOs#XOt#YOu#YOv#ZOw#ZOx#[Oy#[Oz#[O{#[O!U#gO!X#hO!Y#iO!Z#iO!Opi!Ppi!Qpi!Rpi!ipi!xpi_pilpi!Tpi!mpi~O|pi}pi~PBqO|#]O}#]O~PBqOq#XOr#XOs#XOt#YOu#YOv#ZOw#ZOx#[Oy#[Oz#[O{#[O|#]O}#]O!O#^O!P#^O!U#gO!X#hO!Y#iO!Z#iO~O!Qpi!Rpi!ipi!xpi_pilpi!Tpi!mpi~PDvO!T&PO~P5sO!x!}i_!}i~P5sOz&QO~O!x&RO~OV!YOX![O!U&VO![!TO!]!TO!_!gO!`!WO!a!WO!c!UO!e!WO!f!WO~Ob&TO!T&UO~PG^O!U&WO!x&YO~O_&ZO~P5sO!U%QO!i&]O!x&[O~OV&`O~OV&aO#[&bO~O!U%QO~O_&cO~P5sO_&dO~P5sO_&eO~P5sO!U&fO!i{O!xzO~O!x&iO~O!x&kO~P*fOX&lO~O_&mO~P5sOV&`O#[&bO~O!x&oO~OV&pO~OV&rO~OX#UO!U%QO!x&RO~O#b&vO~O#f&yO~OS'OO~P&wO!n'QO~O!hoO!n'QO~OnnO!hoO!n'QO~O!`'TO~Ol%{O_$Za~OV'_Ob'YO~OV'`O~O!T'aO~P5sO!m'bOq$fXr$fXs$fXt$fXu$fXv$fXw$fXx$fXy$fXz$fX{$fX|$fX}$fX!O$fX!P$fX!Q$fX!R$fX!T$fX!U$fX!X$fX!Y$fX!Z$fX~O!U&VO~P*fO!U&WO!x'eO~O!i'gO!x'fO~O!U%QO!i'gO!x'fO~OV'jO~O!n'lO~O!U&fO!x'nO~O!x'pO~P*fO!x'pO~P5sO_'rO~P*fOV'jO#['vO~Oz'wO~OV'xO#['vO~O!x'zO~O!x'{O~O$l'|O$m(OO#b#cP~O#b&vO!x#aX~O#b(RO~O#f&yO!x#eX~OS(TO~P&wO!n(VO~O!hoO!n(VO~Ol(XO~Ol(YOS$sX~OS([O~O_#yal#ya~P5sOl(^O!m(]O!n$hX~Ol(^O!n$hX~O!i(`O~O!x(aO~Ob(bO~O!T(cO~P5sO!m(eO!x(dO~P5sO!U&WO!x(gO~O!i(hO!x(dO~O!r(iOS!pyV!pyW!pyX!pyb!pyh!pyi!pyj!pyk!py![!py!]!py!_!py!`!py!a!py!c!py!e!py!f!py!n!py!q!py!t!py!|!py#P!py#Q!py#S!py#T!py#X!py#Y!py#`!py#d!py#h!py#i!py#j!py!v!py!w!py!z!py~OS(nO!v(lO!z(mO~O!x(pO~P5sO_(rO~P*fO_(rO~P,VO_(rO~O_(uO~P5sOV(vO~OV(wO~O!U%QO!i(hO!x(dO~OV(vO#[(zO~O$l'|O$m(|O#b#cX~O$m(}O#b#cX~O#b)OO~O$o)PO$p)PO#b#gP~OS)SO~P&wO!n)UO~O!n)VO~Ol(YOS$sa~Ol(^O!n$ha~O!T)`O~O!T)aO~O!m)dO!x)cO~P5sOS)hO!v(lO!z(mO~Ob!WO!`!WO!a!WO!c!UO!e!WO!f!WO~O!h)lO~OS)hO~O_)nO~P*fO_)nO~P,VO_)nO~O!x)qO~O!i)rO!x)cO~O!x)sO~O!U&WO!x)tO~OV)uO~O$m)vO#b#ca~O$o)PO$p)PO#b#gX~O#b)xO~OS)yO~P&wOh^Oi_Oj^Ok^O!n)VO~P!+{O!m(]Ol#za!n#za~O!x*PO~P5sO!m*RO!x*PO~P5sOS*SO~O!c!UO!h!bXS!bXl!bX~O!h*TO~OS!ya~P&wO_*VO~P,VO_*VO~O!i*YO!x*PO~OS*ZO~P&wOl*]OS$tX~OS*_O~O!x*`O~P5sOV!ZOWROX![Ob!WO![!TO!]!TO!_!gO!`!WO!a!WO!c!UO!e!WO!f!WO!n*bO!q!hO!t!iO!w*dO!|!kO#P!jO#Q!nO#S!lO#T!mO#X!oO#Y!pOS!ui!v!ui!z!ui~P1xOS!yi~P&wO!m*fO!x*`O~P5sOl*]OS$ta~O!x*jO~P5sOS#uO!w*lO~P&wO!w*mOS!uq!v!uq!z!uq~P&wO!x*nO~O!m*pO!x*jO~P5sOS%VO!w*qO~P&wO!x*rO~O!x*sO~O!x*tO~P5sO!x*vO~OS*wO~O!x*xO~P5sOS*yO~O$o$g$lQrP!`!a!f!ebV!`~", - goto: - "Ib$vPPPPP$w${PPPPPPPPP%zPPPP&R&_&ePPPPP(OP(b(kPPPPPPPPPPPPPPPPP(kPP*V*VPPPPP+RPPP,mP.[PP._PP.x/O/YPP/a0TPP0TP0tPPP0xP0TP1O1{PP0TPP0T0T0TPP2sP0T0T0TP3ZP3^P3aP3jPPP0T3m3|4_0T$wP4l4r4u4y5P5V6z7Q7W7_8_8e8k8q8y9P9f9l9rPP9x9{:O:R=_>X?Q?x@oAeBY*VB|DhPFZF_G^H]PPH]PPH]H]IUIXI[TPOQSXOQ![!ap!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kQ$X!nS$Z!o!pR%m$[SWOQReXQsbQ!ytQ$g!zR%x$hQ!OmR$l#RQ`TQlaS}m#R![!`p!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kQ!|wQ#y!aQ$S!jQ$W!nS$Y!o!pS%h$X$[Q%k$ZQ&s%mT){)V*]QrbS!xstS$f!y!zS%w$g$hR'S%xQ#V!QQ%P#sR&u%n$R!]p{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$c$d%Q%d%t%u%{&V&W&]&d&f&i&k&l&m'P'Q'g'p'r(U(V(e(h(i(p(r)T)U)d)l)n)r)z*R*T*U*V*Y*b*c*f*k*p!s#j!S!}#q#t$k$n$q$r$s$t$u$v$w$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u$R!Yp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$c$d%Q%d%t%u%{&V&W&]&d&f&i&k&l&m'P'Q'g'p'r(U(V(e(h(i(p(r)T)U)d)l)n)r)z*R*T*U*V*Y*b*c*f*k*p$X!Wp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$c$d%Q%d%t%u%{&V&W&]&d&f&i&k&l&m'P'Q'g'p'r(U(V(e(h(i(l(p(r)T)U)V)d)l)n)r)z*R*T*U*V*Y*]*b*c*f*k*pR#o!UQqbU!wrstU$e!x!y!zU%v$f$g$hS'R%w%xR(W'SQ'^&OR)_(`S'Z&O(`Q)Z(]R)[(^S'[&O(`R)](^![!dp!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kR$U!l!]!dp!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kT(j'l(kQ(o'lR)i(k![!_p!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kQ%c$TQ's&kQ(s'pR)o(pSPOQ![!dp!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kR%d$TQ#x!`S%Z#y$YQ%g$WQ&n%hQ&q%kQ'y&sR*[){R&x%oR(P&vQ&{%pQ&|%qR&}%rR)R(RQ%T#sU&_%X%]%nS'i&a&rR(y'xf%R#s%S%X%]%n&^&a&r'h'x(xT&g%a&hg%R#s%S%X%]%n&^&a&r'h'x(xQ'U%yR)X(YQ)W(XT)|)V*]QQORZQQ#S!OR$m#S$Q!Vp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$c$d%Q%d%t%u%{&V&W&]&d&f&i&k&l&m'P'Q'g'p'r(U(V(e(h(i(p(r)T)U)d)l)n)r)z*R*T*U*V*Y*b*c*f*k*pS#p!V)jV)j(l)V*]Q#n!UR${#nQ%|$nR'X%|S(_'Z'[R)^(_Q!fpQ#v!^f#}!f#v$c%t'P(U)T)z*U*c*kQ$c!vQ%t$dQ'P%uQ(U'QQ)T(VQ)z)UQ*U)lQ*c*TR*k*bQ(k'lR)g(kQ&w%oR(Q&wQ'}&vR({'}U&z%p%q%rR(S&zQ)Q(RR)w)QQ%S#sW&X%S&^'h(xU&^%X%]%nS'h&a&rR(x'xQ&h%aR'm&hQ*^)}R*i*^Q(Z'UR)Y(ZRh[R!PmR$o#U![!Sp!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kQ!}{Q#q!XQ#t![Q$k#PQ$n#UQ$q#`Q$r#aQ$s#bQ$t#cQ$u#dQ$v#eQ$w#fQ$x#gQ$z#kQ%W#wQ%^$PQ%_$QQ%`$RQ%b$TQ%f$VU&S%Q&W&fQ&j%dQ'W%{Q'c&VQ'd&]Q'o&iQ'q&kQ't&lQ(f'gQ(q'pQ)b(eQ)e(hQ)m(pQ*Q)dQ*X)rQ*a*RQ*g*YQ*o*fR*u*p!o#`!S!}#t$k$n$r$s$t$u$v$w$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u!m#a!S!}#t$k$n$s$t$u$v$w$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u!k#b!S!}#t$k$n$t$u$v$w$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u!i#c!S!}#t$k$n$u$v$w$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u!g#d!S!}#t$k$n$v$w$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u!e#e!S!}#t$k$n$w$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u!c#f!S!}#t$k$n$x$z%W%^%_%`%b%f&S&j'W'c'd'o'q't(f(q)b)e)m*Q*X*a*g*o*u$R!Xp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$c$d%Q%d%t%u%{&V&W&]&d&f&i&k&l&m'P'Q'g'p'r(U(V(e(h(i(p(r)T)U)d)l)n)r)z*R*T*U*V*Y*b*c*f*k*p$Q!Yp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$c$d%Q%d%t%u%{&V&W&]&d&f&i&k&l&m'P'Q'g'p'r(U(V(e(h(i(p(r)T)U)d)l)n)r)z*R*T*U*V*Y*b*c*f*k*pQ)k(lT)|)V*]T']&O(`|!ep!^!f!v#v$c$d%t%u'P'Q(U(V)T)U)l)z*T*U*b*c*kQ'k&dQ'u&mQ(t'rQ)f(iQ)p(rQ*W)nR*e*V![!cp!^!f!v#v$c$d%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kW#z!a!n!o!pU%i$X$Z$[R&t%m!m!bp!^!a!f!n!o!p!v#v$X$Z$[$c$d%m%t%u&d&m'P'Q'r(U(V(i(r)T)U)l)n)z*T*U*V*b*c*kR'V%yR*O)VQ)})VR*h*]", - nodeNames: - "⚠ Whitespace Comment Specification CloseBrace ClassDeclaration AlignedModifier Identifier aligned OpenParenthesis AlignmentBitCount8 AlignmentBitCount16 AlignmentBitCount32 AlignmentBitCount64 AlignmentBitCount128 CloseParenthesis ExpandableModifier expandable IntegerLiteral abstract class ParameterList Parameter ElementaryType int unsigned float bit Comma ExtendsModifier extends ParameterValueList BinaryExpression Multiplication Division Modulus Addition Subtraction BitwiseShiftLeft BitwiseShiftRight RelationalLessThan RelationalLessThanOrEqual RelationalGreaterThan RelationalGreaterThanOrEqual RelationalEqual RelationalNotEqual BitwiseAnd BitwiseOr LogicalAnd LogicalOr UnaryExpression CloseBracket OpenBracket ArrayElementAccess ClassMemberAccess Period PostfixIncrement PostfixDecrement UnaryPlus UnaryNegation LengthofExpression lengthof BinaryLiteral HexadecimalLiteral MultipleCharacterLiteral SingleQuote MultipleCharacterLiteralCharacters DecimalLiteral FloatingPointLiteral BitModifier Colon Assignment ExtendedClassIdRange ClassId ClassIdRange RangeOperator OpenBrace CompoundStatement IfStatement if else SwitchStatement switch CaseClause case break Semicolon DefaultClause default ForStatement for AssignmentExpression ComputedElementaryTypeDefinition computed const DoStatement do while WhileStatement ExpressionStatement ElementaryTypeDefinition reserved legacy LengthAttribute LookAhead MapDefinition ClassDefinition StringDefinition base64string Base64StringLiteral DoubleQuote Base64StringLiteralCharacters utf16string UtfStringLiteral UtfPrefix UtfStringLiteralCharacters utf8string utf8list utfstring ArrayDefinition ImplicitArrayDimension ExplicitArrayDimension PartialArrayDimension ComputedArrayDefinition MapDeclaration map MapEntry AggregateOutputValue ElementaryTypeOutputValue", - maxTerm: 175, + states: "!.SQYQPOOOOQO'#FS'#FSQYQPOOOnQPO'#CbO!oQPO'#ClO!zQPO'#E]O#`QPO'#CaO#eQPO'#CaO#jQPO'#CaO#rQPO'#CaO#}QPO'#E}OOQO-E9Q-E9QO$SQQO,58|O$eQPO,59WOOQO'#Cs'#CsO$jQPO'#CsO$oQPO,5:wO$tQPO,5:wO%VQPO,58{O%eQPO,58{O%jQPO,58{O%oQPO,58{O%wQPO,5;iOOQO'#Ff'#FfO%|QPO1G.hO&RQPO1G.rOOQO,59_,59_O&WQPO1G0cO&`QPO1G0cO&eQPO'#CqO&lQPO'#CzO&qQPO'#DtO&vQPO1G.gO(rQPO1G.gO(wQPO1G.gO)PQPO1G.gO)[QPO1G.gO)jQPO1G.gO)oQPO1G.gO)tQPO1G1TOOQO7+$S7+$SOOQO7+$^7+$^OOQO7+%}7+%}O){QPO7+%}O*pQPO7+%}O*xQPO'#CrO*}QPO'#FgO+VQPO,59]O+[QPO,59fO+gQPO,5:`O-SQQO'#EdOOQO'#Fr'#FrO-ZQSO'#FUO-cQQO'#DoOOQO'#Fs'#FsO){QPO'#DaOOQO'#Da'#DaO/]QWO'#DaO){QPO'#DaOOQO'#Fi'#FiO0yQPO'#D|O2uQPO'#EdO2zQPO'#EeO3SQPO'#ElOOQO'#Fw'#FwO3jQPO'#ElOOQO'#Fv'#FvOOQO'#FY'#FYO3oQPO7+$RO5kQPO'#DkO5pQPO'#D}O5uQPO'#EQO!zQPO'#E]O5zQPO'#EYO6PQPO'#E`O6UQPO'#EcO6ZQPO'#ElO6tQPO'#ElO7bQPO'#ElO8OQPO'#FxO8TQPO'#F{O8YQPO'#GOO8_QPO'#GPOOQO7+$R7+$RO3oQPO7+$RO8dQPO7+$RO8iQPO7+$RO8qQPO7+$RO8|QPO7+$RO9[QPO7+$RO9aQPO7+&oO:yQQO<PQPO,5:hO){QPO'#EhO?{QPO,5;PO@TQPO,5;PO@YQPO,5;WO@_QPO,5;dOOQO,5;W,5;WOOQO-E9W-E9WOOQO<lAN>lO!/oQPOAN>lO!/tQPO<uOOQO'#FZ'#FZO!8dQPOAN>xO!8oQPO'#ESO!9TQPO'#EWOOQOAN>xAN>xO!9YQPOAN>xO!9_QPOAN?QO!9fQQOAN?QO!9mQPOAN?QO!;cQPOAN?QOOQOAN?QAN?QO!;hQPOAN?WO!;mQPOAN?pO!;pQPOAN?pO!;uQPOAN?]O!;}QPOAN?bO!jQPO'#FQOOQO1G1V1G1VOOQO,5;},5;}OOQO-E9a-E9aOOQO1G0P1G0PO!?QQPO,5;sOOQO,5;s,5;sOOQO-E9V-E9VOOQOLD)rLD)rOOQO<jQPO'#FbO!HwQPO,5zO# wQPOAN>zOOQOAN>zAN>zOOQO!.K9T!.K9TO# |QQO!.K9TO#!TQPOG24fOOQOG24fG24fOOQO!4/.o!4/.oOOQOLD*QLD*Q", + stateData: "#!h~OPOSQOS~OWROaSOcVOdUO#QTO#rYO~OX[OaUXcUXdUXVUXhUXiUXjUXkUXlUX#aUX#eUX#iUX#jUX#kUX~OX]Oc`Xd`X~Oh^Oi_Oj_Ok^Ol^O#RaO~OVbO~OdcO~OcdOdcO~OaSOcdOdcO~OVfO~OYgOZgO[gO]gO^gO~ObiO~OhjO~OVkO~Oh^Oi_Oj_Ok^Ol^O~OXmOonO!ioO!opO~OVtO~OduO~OcvOduO~OXwO~O_xO~O_yO~O!j{O!yzO~OV|O~OV}O~P$tOV!QO~Ol!RO~OS!uOV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tO!o!vO~O!ioO!o!vO~OonO!ioO!o!vO~OXmOonO!ioO!o!vO~OV!zO~Od!{O~OV!|O~P$tOV!YOX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO~O!j#PO!y#OO~OV#QO~Om#RO_$ZX~O_#TO~OX#UO!ina!ona~OX#WO~Or#XOs#XOt#XOu#YOv#YOw#ZOx#ZOy#[Oz#[O{#[O|#[O}#]O!O#]O!P#^O!Q#^O!R#_O!S#_O!V#gO!Y#hO!Z#iO![#iO!j#kO~O!y#lO~P+lO$h#mO!d!eP~O!d!UOr!cXs!cXt!cXu!cXv!cXw!cXx!cXy!cXz!cX{!cX|!cX}!cX!O!cX!P!cX!Q!cX!R!cX!S!cX!V!cX!Y!cX!Z!cX![!cX!j!cX!y!cX_!cXm!cX!U!cX!n!cX~OV#sOr!TXs!TXt!TXu!TXv!TXw!TXx!TXy!TXz!TX{!TX|!TX}!TX!O!TX!P!TX!Q!TX!R!TX!S!TX!V!TX!Y!TX!Z!TX![!TX!j!TX!y!TX~OS#uOV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tO!y#lO~OX#wOy#rO~OV#{O#a!qO#e!rO#i!sO#j!sO#k!tO~P$tO!y#|O~OS$OOV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tOX$PO~OX$QO~OX$RO~OX$TO~O!o!^O~OX$VO~OV#{OWRO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tOV$ZOWRO#R$YO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tOV$[OWRO#R$YO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tOV$]O~OV$^O~OV$_O~OV$`O~O!o$bO~O!ioO!o$bO~OonO!ioO!o$bO~OXmOonO!ioO!o$bO~OV$fO~O_$gO~Or#XOs#XOt#XOu#YOv#YOw#ZOx#ZOy#[Oz#[O{#[O|#[O}#]O!O#]O!P#^O!Q#^O!R#_O!S#_O!V#gO!Y#hO!Z#iO![#iO~O!y$hO~P9fOm#RO_$Za~Ob$nO~OV$wO~O$h#mO!d!eX~O!d$zO~O!V#gO!Y#hO!Z#iO![#iOr!Tas!Tat!Tau!Tav!Taw!Tax!Tay!Taz!Ta{!Ta|!Ta}!Ta!O!Ta!P!Ta!Q!Ta!R!Ta!S!Ta!j!Ta!y!Ta_!Tam!Ta!U!Ta!n!Ta~OV${O~OX#UO!V%OO!y$|O~O_%SO~P9fOS%TOV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tOV%VO#]%WO~OX#wO~O!y%YO~OV%ZO~OV%_O~O!y%bO#QTO~P){O#U%cO~OV%gO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tOX#wOy%hO~OV%ZOy%hO~OV%kOy%hO~O!j%lO!y$la~O!j%mO!y$oa~O!j%nO!y$ra~O!j%oO!y$sa~OS%pOV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tO!o%rO~O!ioO!o%rO~OonO!ioO!o%rO~OXmOonO!ioO!o%rO~O!o%vO~O!y%wO~P9fOm%xO_$[X~P9fO_%zO~O_%{O~O!V#gO!Y#hO!Z#iO![#iOuqivqiwqixqiyqizqi{qi|qi}qi!Oqi!Pqi!Qqi!Rqi!Sqi!jqi!yqi_qimqi!Uqi!nqi~Orqisqitqi~PFOOr#XOs#XOt#XO~PFOOr#XOs#XOt#XOu#YOv#YO!V#gO!Y#hO!Z#iO![#iOyqizqi{qi|qi}qi!Oqi!Pqi!Qqi!Rqi!Sqi!jqi!yqi_qimqi!Uqi!nqi~Owqixqi~PHWOw#ZOx#ZO~PHWOr#XOs#XOt#XOu#YOv#YOw#ZOx#ZOy#[Oz#[O{#[O|#[O!V#gO!Y#hO!Z#iO![#iO!Pqi!Qqi!Rqi!Sqi!jqi!yqi_qimqi!Uqi!nqi~O}qi!Oqi~PJ]O}#]O!O#]O~PJ]Or#XOs#XOt#XOu#YOv#YOw#ZOx#ZOy#[Oz#[O{#[O|#[O}#]O!O#]O!P#^O!Q#^O!V#gO!Y#hO!Z#iO![#iO~O!Rqi!Sqi!jqi!yqi_qimqi!Uqi!nqi~PLbO!U%|O~P9fO!y#Oi_#Oi~P9fO{%}O~O!y&OO~OV!YOX![O!V&SO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO~Ob&QO!U&RO~PNxO!V&TO!y&VO~O_&WO~P9fO!V%OO!j&YO!y&XO~OV&]O~OV&^O#]&_O~O!V%OO~O_&`O~P9fO_&aO~P9fO_&bO~P9fO!V&cO!j{O!yzO~O!y&fO~O!y&hO~P){OX&iO~O_&jO~P9fO!y&lO~OV&mO~OV&nO~OX#UO!V%OO!y&OO~O#c&sO~O#g&vO~OS&{OV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tO!o&}O~O!ioO!o&}O~OonO!ioO!o&}O~O!a'QO~Om%xO_$[a~OV'[Ob'VO~OV']O~O!U'^O~P9fO!n'_Or$gXs$gXt$gXu$gXv$gXw$gXx$gXy$gXz$gX{$gX|$gX}$gX!O$gX!P$gX!Q$gX!R$gX!S$gX!U$gX!V$gX!Y$gX!Z$gX![$gX~O!V&SO~P){O!V&TO!y'bO~O!j'dO!y'cO~O!V%OO!j'dO!y'cO~OV'gO~O!o'iO~O!V&cO!y'kO~O!y'mO~P){O!y'mO~P9fO_'oO~P){OV'sO#]'tO~O{'uO~OV'gO#]'tO~O!y'wO~O!y'xO~O$m'yO$n'{O#c#dP~O#c&sO!y#bX~O#c(OO~O#g&vO!y#fX~OS(QOV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tO!o(SO~O!ioO!o(SO~Om(UO~Om(VOS$tX~OS(XO~O_#zam#za~P9fOm(ZO!n(YO!o$iX~Om(ZO!o$iX~O!j(]O~O!y(^O~Ob(_O~O!U(`O~P9fO!n(bO!y(aO~P9fO!V&TO!y(dO~O!j(eO!y(aO~O!s(fOS!qyV!qyW!qyX!qyb!qyh!qyi!qyj!qyk!qyl!qy!]!qy!^!qy!`!qy!a!qy!b!qy!d!qy!f!qy!g!qy!o!qy!r!qy!u!qy!}!qy#Q!qy#R!qy#T!qy#U!qy#Y!qy#Z!qy#a!qy#e!qy#i!qy#j!qy#k!qy!w!qy!x!qy!{!qy~OS(kO!w(iO!{(jO~O!y(mO~P9fO_(oO~P){O_(oO~P+lO_(oO~O_(rO~P9fO!V%OO!j(eO!y(aO~OV(uO~OV(vO~OV(uO#](wO~O$m'yO$n(yO#c#dX~O$n(zO#c#dX~O#c({O~O$p(|O$q(|O#c#hP~OS)POV!ZOWROX![Ob!WO!]!TO!^!TO!`!gO!a!WO!b!WO!d!UO!f!WO!g!WO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P$tO!o)RO~O!o)SO~Om(VOS$ta~Om(ZO!o$ia~O!U)]O~O!U)^O~O!n)aO!y)`O~P9fOS)eO!w(iO!{(jO~Ob!WO!a!WO!b!WO!d!UO!f!WO!g!WO~O!i)iO~OS)eO~O_)kO~P){O_)kO~P+lOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P!8oO_)kO~O!y)nO~O!V&TO!y)oO~O!j)pO!y)`O~O!y)qO~OV)rO~O$n)sO#c#da~O$p(|O$q(|O#c#hX~O#c)uO~OS)vOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P!8oOh^Oi_Oj_Ok^Ol^O!o)SO~P!8oO!n(YOm#{a!o#{a~O!y)|O~P9fO!n*OO!y)|O~P9fOS*PO~O!d!UO!i!cXS!cXm!cX~O!i*QO~OV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tOS!za~P!8oO_*SO~P+lO_*SO~O!j*VO!y)|O~OS*WOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P!8oOm*YOS$uX~OS*[O~O!y*]O~P9fOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o*_O!r!hO!u!iO!x*aO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tOS!vi!w!vi!{!vi~P!8oOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tOS!zi~P!8oO!n*cO!y*]O~P9fOm*YOS$ua~O!y*gO~P9fOS#uOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!x*iO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P!8oOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!x*jO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tOS!vq!w!vq!{!vq~P!8oO!y*kO~O!n*mO!y*gO~P9fOS%TOV!ZOWROX![Oh^Oi_Oj_Ok^Ol^O!]!TO!^!TO!`!gO!o!^O!r!hO!u!iO!x*nO!}!kO#Q!jO#R!nO#T!lO#U!mO#Y!oO#Z!pO#a!qO#e!rO#i!sO#j!sO#k!tO~P!8oO!y*oO~O!y*pO~O!y*qO~P9fO!y*sO~OS*tO~O!y*uO~P9fOS*vO~O$p$h$mQsP!a!b!g!fbV!a~", + goto: "IX$wPPPPP$x$|PPPPPPPPP%yPPPP&Q&^&dPPPPPP'zP(^(gPPPPPPPPPPPPPPPPP(gPP*R*RPPPPP*}PPP,iP.WPP.ZPP.t.z/UPP/]0PPP0PP0pPPP0tP0PP0z1wPP0PPP0P0P0PPP2oP0P0P0PP3SP3VP3YP3cPPP0P3f3u4W0P$xP4e4k4n4r4x5O6s6y7P7W8W8^8d8j8r8x9_9e9kPP9q9t9w9z=W>Q>y?q@hA^BR*RBuDaPFSFWGVHTPPHTPPHTHTH{IOIRTPOQSXOQ![!ap!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hU$W!n!o!pR%j$YSWOQReXQsbQ!ytQ$e!zR%u$fQ!OmR$j#RQ`TQlaS}m#R![!`p!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hQ!|wS#y!a!nQ$S!jS$X!o!pQ%e$WQ%i$YQ&p%jT)x)S*YQrbS!xstS$d!y!zS%t$e$fR'P%uQ#V!QQ$}#sR&r%k$R!]p{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$a$b%O%b%q%r%x&S&T&Y&a&c&f&h&i&j&|&}'d'm'o(R(S(b(e(f(m(o)Q)R)a)i)k)p)w*O*Q*R*S*V*_*`*c*h*m!s#j!S!}#q#t$i$l$o$p$q$r$s$t$u$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r$R!Yp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$a$b%O%b%q%r%x&S&T&Y&a&c&f&h&i&j&|&}'d'm'o(R(S(b(e(f(m(o)Q)R)a)i)k)p)w*O*Q*R*S*V*_*`*c*h*m$X!Wp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$a$b%O%b%q%r%x&S&T&Y&a&c&f&h&i&j&|&}'d'm'o(R(S(b(e(f(i(m(o)Q)R)S)a)i)k)p)w*O*Q*R*S*V*Y*_*`*c*h*mR#o!UQqbU!wrstU$c!x!y!zU%s$d$e$fS'O%t%uR(T'PQ'Z%{R)[(]S'W%{(]Q)W(YR)X(ZS'X%{(]R)Y(Z![!dp!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hR$U!l!]!dp!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hT(g'i(hQ(l'iR)f(h![!_p!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hQ%a$TQ'p&hQ(p'mR)l(mSPOQ![!dp!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hR%b$TQ#x!`S%X#y$XQ&k%eQ&o%iQ'v&pR*X)xR&u%lR'|&sQ&x%mQ&y%nR&z%oR)O(OQ%R#sU&[%V%Z%kS'f&^&mR(t'sf%P#s%Q%V%Z%k&Z&^&m'e's(sT&d%_&eg%P#s%Q%V%Z%k&Z&^&m'e's(sQ'R%vR)U(VQ)T(UT)y)S*YQQORZQQ#S!OR$k#S$Q!Vp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$a$b%O%b%q%r%x&S&T&Y&a&c&f&h&i&j&|&}'d'm'o(R(S(b(e(f(m(o)Q)R)a)i)k)p)w*O*Q*R*S*V*_*`*c*h*mS#p!V)gV)g(i)S*YQ#n!UR$y#nQ%y$lR'U%yS(['W'XR)Z([Q!fpQ#v!^f#}!f#v$a%q&|(R)Q)w*R*`*hQ$a!vQ%q$bQ&|%rQ(R&}Q)Q(SQ)w)RQ*R)iQ*`*QR*h*_Q(h'iR)d(hQ&t%lR'}&tQ'z&sR(x'zU&w%m%n%oR(P&wQ(}(OR)t(}Q%Q#sW&U%Q&Z'e(sU&Z%V%Z%kS'e&^&mR(s'sQ&e%_R'j&eQ*Z)zR*f*ZQ(W'RR)V(WRh[R!PmR$m#U![!Sp!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hQ!}{Q#q!XQ#t![Q$i#PQ$l#UQ$o#`Q$p#aQ$q#bQ$r#cQ$s#dQ$t#eQ$u#fQ$v#gQ$x#kQ%U#wQ%[$PQ%]$QQ%^$RQ%`$TQ%d$VU&P%O&T&cQ&g%bQ'T%xQ'`&SQ'a&YQ'l&fQ'n&hQ'q&iQ(c'dQ(n'mQ)_(bQ)b(eQ)j(mQ)})aQ*U)pQ*^*OQ*d*VQ*l*cR*r*m!o#`!S!}#t$i$l$p$q$r$s$t$u$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r!m#a!S!}#t$i$l$q$r$s$t$u$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r!k#b!S!}#t$i$l$r$s$t$u$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r!i#c!S!}#t$i$l$s$t$u$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r!g#d!S!}#t$i$l$t$u$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r!e#e!S!}#t$i$l$u$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r!c#f!S!}#t$i$l$v$x%U%[%]%^%`%d&P&g'T'`'a'l'n'q(c(n)_)b)j)}*U*^*d*l*r$R!Xp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$a$b%O%b%q%r%x&S&T&Y&a&c&f&h&i&j&|&}'d'm'o(R(S(b(e(f(m(o)Q)R)a)i)k)p)w*O*Q*R*S*V*_*`*c*h*m$Q!Yp{!X![!^!f!v#P#U#`#a#b#c#d#e#f#g#k#v#w$P$Q$R$T$V$a$b%O%b%q%r%x&S&T&Y&a&c&f&h&i&j&|&}'d'm'o(R(S(b(e(f(m(o)Q)R)a)i)k)p)w*O*Q*R*S*V*_*`*c*h*mQ)h(iT)y)S*YT'Y%{(]|!ep!^!f!v#v$a$b%q%r&|&}(R(S)Q)R)i)w*Q*R*_*`*hQ'h&aQ'r&jQ(q'oQ)c(fQ)m(oQ*T)kR*b*S![!cp!^!f!v#v$a$b%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hW#z!a!n!o!pS%f$W$YR&q%j!k!bp!^!a!f!n!o!p!v#v$W$Y$a$b%j%q%r&a&j&|&}'o(R(S(f(o)Q)R)i)k)w*Q*R*S*_*`*hR'S%vR){)SQ)z)SR*e*Y", + nodeNames: "⚠ Whitespace Comment Specification CloseBrace ClassDeclaration AlignedModifier Identifier aligned OpenParenthesis AlignmentBitCount8 AlignmentBitCount16 AlignmentBitCount32 AlignmentBitCount64 AlignmentBitCount128 CloseParenthesis ExpandableModifier expandable IntegerLiteral abstract class ParameterList Parameter ElementaryType int signed unsigned float bit Comma ExtendsModifier extends ParameterValueList BinaryExpression Multiplication Division Modulus Addition Subtraction BitwiseShiftLeft BitwiseShiftRight RelationalLessThan RelationalLessThanOrEqual RelationalGreaterThan RelationalGreaterThanOrEqual RelationalEqual RelationalNotEqual BitwiseAnd BitwiseOr LogicalAnd LogicalOr UnaryExpression CloseBracket OpenBracket ArrayElementAccess ClassMemberAccess Period PostfixIncrement PostfixDecrement UnaryPlus UnaryNegation LengthofExpression lengthof BinaryLiteral HexadecimalLiteral MultipleCharacterLiteral SingleQuote MultipleCharacterLiteralCharacters DecimalLiteral FloatingPointLiteral BitModifier Colon Assignment ExtendedClassIdRange ClassId ClassIdRange RangeOperator OpenBrace CompoundStatement IfStatement if else SwitchStatement switch CaseClause case break Semicolon DefaultClause default ForStatement for AssignmentExpression ComputedElementaryTypeDefinition computed const DoStatement do while WhileStatement ExpressionStatement ElementaryTypeDefinition reserved legacy LengthAttribute LookAhead MapDefinition ClassDefinition StringDefinition base64string Base64StringLiteral DoubleQuote Base64StringLiteralCharacters utf16string UtfStringLiteral UtfPrefix UtfStringLiteralCharacters utf8string utf8list utfstring ArrayDefinition ImplicitArrayDimension ExplicitArrayDimension PartialArrayDimension ComputedArrayDefinition MapDeclaration map MapEntry AggregateOutputValue ElementaryTypeOutputValue", + maxTerm: 176, context: defaultContextTracker, nodeProps: [ - ["openedBy", 4, "OpenBrace", 15, "OpenParenthesis", 51, "OpenBracket"], - ["closedBy", 9, "CloseParenthesis", 52, "CloseBracket", 76, "CloseBrace"], + ["openedBy", 4,"OpenBrace",15,"OpenParenthesis",52,"OpenBracket"], + ["closedBy", 9,"CloseParenthesis",53,"CloseBracket",77,"CloseBrace"] ], - skippedNodes: [0, 1, 2], + skippedNodes: [0,1,2], repeatNodeCount: 16, - tokenData: - "N_~R!dX^%apq&Uqr&}rs'^su'euv'lvw'uwx(Wxy(_yz(hz{(q{|(||})c}!O)l!O!P*P!P!Q*b!Q!R-q!R!S;Y!S!T>}!T!U?r!U!W>}!W!XA^!X!Y>}!Y!ZBx!Z![>}![!]Co!]!^Cx!^!_DR!_!`Dl!`!aEP!a!c'e!c!wEj!w!xFU!x!}Ej!}#OJr#O#PJ{#P#QKc#Q#R'e#R#SKl#S#T'e#T#iEj#i#jLS#j#oEj#o#pLs#p#qL|#q#rM_#r#s'e#s#yKX#y#z%a#z$fKX$f$gMh$g#BYKX#BY#BZMh#BZ$ISKX$IS$I_Mh$I_$I|KX$I|$JO%a$JO$JTKX$JT$JUMh$JU$KVKX$KV$KWMh$KW&FUKX&FU&FVMh&FV;'SKX<%l?HTKX?HUOKX~%fYP~X^%apq%a#y#z%a$f$g%a#BY#BZ%a$IS$I_%a$I|$JO%a$JT$JU%a$KV$KW%a&FU&FV%a~&_Y$op$gSP~X^%apq%a#y#z%a$f$g%a#BY#BZ%a$IS$I_%a$I|$JO%a$JT$JU%a$KV$KW%a&FU&FV%a!O'UP$op$gS!_!`'XY'^O}Y!V'eO#b!R$gSt'lO$op$gS!O'uOsY$op$gS!O(OP!OY$op$gSvw(RY(WO!QYw(_O!cV$opu(hOXP$op$gSw(qO_R$op$gS!P(|O#[PqY$op$gS!a)ZPtY![P$op$gS$l`{|)^Y)cO!YYw)lOlR$op$gS!P)wPuY!]P$op$gS}!O)zY*PO!ZY!P*YP!XY$op$gS!O!P*]R*bO!mR~*mP$op$gS$l`r~!P!Q*p~*uUQ~OY*pZ#O*p#O#P+X#P;'S*p;'S;=`-k<%lO*p~+^UQ~OY*pZ#O*p#O#P+p#P;'S*p;'S;=`-k<%lO*p~+uYQ~OY*pZ#O*p#O#P+p#P#b*p#b#c*p#c#f*p#f#g,e#g;'S*p;'S;=`-k<%lO*p~,jUQ~OY*pZ#O*p#O#P,|#P;'S*p;'S;=`-k<%lO*p~-RWQ~OY*pZ#O*p#O#P+p#P#b*p#b#c*p#c;'S*p;'S;=`-k<%lO*p~-nP;=`<%l*p!_-|[$op$gS$l`bP!O!P.r!Q!R0Q!R![0Q!c!}0d#R#S0Q#T#U0d#U#V0x#V#X0d#X#Y5]#Y#l0d#l#m6u#m#o0dP.uQ!Q!R.{!R![.{P/QR!eP!Q!R.{!R![.{#X#Y/ZP/^S{|/j}!O/j!Q!R/{!R![/pP/mP!R![/pP/uQ!fP!Q!R/p!R![/pP0QO!fPX0TT!Q!R0Q!R![0Q!c!}0d#R#S0Q#T#o0dX0iTVX!Q!R0d!R![0d!c!}0d#R#S0d#T#o0dX1PU!`PVX!Q!R1c!R!S1c!S![0d!c!}0d#R#S0d#T#o0dX1jU!`PVX!Q!R1|!R!S1|!S![0d!c!}0d#R#S0d#T#o0dX2TU!`PVX!Q!R2g!R!S2g!S![0d!c!}0d#R#S0d#T#o0dX2nU!`PVX!Q!R3Q!R!S3Q!S![0d!c!}0d#R#S0d#T#o0dX3XV!`PVX!O!P3n!Q!R4r!R!S4r!S![0d!c!}0d#R#S0d#T#o0dP3qQ!Q!R3w!R!S3wP3|Q!`P!Q!R4S!R!S4SP4XQ!`P!Q!R4_!R!S4_P4dQ!`P!Q!R4j!R!S4jP4oP!`P!O!P3nX4yU!`PVX!Q!R4r!R!S4r!S![0d!c!}0d#R#S0d#T#o0dX5bVVX{|/j}!O/j!Q!R5w!R![6_!c!}0d#R#S0d#T#o0dX6OT!fPVX!Q!R0d!R![0d!c!}0d#R#S0d#T#o0dX6fT!fPVX!Q!R6_!R![6_!c!}0d#R#S0d#T#o0dX6|U!aPVX!Q!R7`!R![7`!c!i7`!i!}0d#R#S0d#T#o0dX7gU!aPVX!Q!R7y!R![7y!c!i7y!i!}0d#R#S0d#T#o0dX8QU!aPVX!Q!R8d!R![8d!c!i8d!i!}0d#R#S0d#T#o0dX8kU!aPVX!Q!R8}!R![8}!c!i8}!i!}0d#R#S0d#T#o0dX9UV!aPVX!O!P9k!Q!R:o!R![:o!c!i:o!i!}0d#R#S0d#T#o0dP9nQ!Q![9t!c!i9tP9yQ!aP!Q![:P!c!i:PP:UQ!aP!Q![:[!c!i:[P:aQ!aP!Q![:g!c!i:gP:lP!aP!O!P9kX:vU!aPVX!Q!R:o!R![:o!c!i:o!i!}0d#R#S0d#T#o0d!a;e[$op$gS$l`bP!O!P.r!Q!R^!X![eWZQbP!O!P.r!Q!R}!T!U?r!U!W>}!W!XA^!X!Y>}!Y!ZBx!Z![>}![!]Co!]!^Cx!^!_DR!_!`Dl!`!aEP!a!c'e!c!wEj!w!xFU!x!}Ej!}#OJr#O#PJ{#P#QKc#Q#R'e#R#SKl#S#T'e#T#iEj#i#jLS#j#oEj#o#pLs#p#qL|#q#rM_#r#s'e#s#yKX#y#z%a#z$fKX$f$gMh$g#BYKX#BY#BZMh#BZ$ISKX$IS$I_Mh$I_$I|KX$I|$JO%a$JO$JTKX$JT$JUMh$JU$KVKX$KV$KWMh$KW&FUKX&FU&FVMh&FV;'SKX<%l?HTKX?HUOKX~%fYP~X^%apq%a#y#z%a$f$g%a#BY#BZ%a$IS$I_%a$I|$JO%a$JT$JU%a$KV$KW%a&FU&FV%a~&_Y$pp$hSP~X^%apq%a#y#z%a$f$g%a#BY#BZ%a$IS$I_%a$I|$JO%a$JT$JU%a$KV$KW%a&FU&FV%a!O'UP$pp$hS!_!`'XY'^O!OY!V'eO#c!R$hSt'lO$pp$hS!O'uOtY$pp$hS!O(OP!PY$pp$hSvw(RY(WO!RYw(_O!dV$ppu(hOXP$pp$hSw(qO_R$pp$hS!P(|O#]PrY$pp$hS!a)ZPuY!]P$pp$hS$m`{|)^Y)cO!ZYw)lOmR$pp$hS!P)wPvY!^P$pp$hS}!O)zY*PO![Y!P*YP!YY$pp$hS!O!P*]R*bO!nR~*mP$pp$hS$m`s~!P!Q*p~*uUQ~OY*pZ#O*p#O#P+X#P;'S*p;'S;=`-k<%lO*p~+^UQ~OY*pZ#O*p#O#P+p#P;'S*p;'S;=`-k<%lO*p~+uYQ~OY*pZ#O*p#O#P+p#P#b*p#b#c*p#c#f*p#f#g,e#g;'S*p;'S;=`-k<%lO*p~,jUQ~OY*pZ#O*p#O#P,|#P;'S*p;'S;=`-k<%lO*p~-RWQ~OY*pZ#O*p#O#P+p#P#b*p#b#c*p#c;'S*p;'S;=`-k<%lO*p~-nP;=`<%l*p!_-|[$pp$hS$m`bP!O!P.r!Q!R0Q!R![0Q!c!}0d#R#S0Q#T#U0d#U#V0x#V#X0d#X#Y5]#Y#l0d#l#m6u#m#o0dP.uQ!Q!R.{!R![.{P/QR!fP!Q!R.{!R![.{#X#Y/ZP/^S{|/j}!O/j!Q!R/{!R![/pP/mP!R![/pP/uQ!gP!Q!R/p!R![/pP0QO!gPX0TT!Q!R0Q!R![0Q!c!}0d#R#S0Q#T#o0dX0iTVX!Q!R0d!R![0d!c!}0d#R#S0d#T#o0dX1PU!aPVX!Q!R1c!R!S1c!S![0d!c!}0d#R#S0d#T#o0dX1jU!aPVX!Q!R1|!R!S1|!S![0d!c!}0d#R#S0d#T#o0dX2TU!aPVX!Q!R2g!R!S2g!S![0d!c!}0d#R#S0d#T#o0dX2nU!aPVX!Q!R3Q!R!S3Q!S![0d!c!}0d#R#S0d#T#o0dX3XV!aPVX!O!P3n!Q!R4r!R!S4r!S![0d!c!}0d#R#S0d#T#o0dP3qQ!Q!R3w!R!S3wP3|Q!aP!Q!R4S!R!S4SP4XQ!aP!Q!R4_!R!S4_P4dQ!aP!Q!R4j!R!S4jP4oP!aP!O!P3nX4yU!aPVX!Q!R4r!R!S4r!S![0d!c!}0d#R#S0d#T#o0dX5bVVX{|/j}!O/j!Q!R5w!R![6_!c!}0d#R#S0d#T#o0dX6OT!gPVX!Q!R0d!R![0d!c!}0d#R#S0d#T#o0dX6fT!gPVX!Q!R6_!R![6_!c!}0d#R#S0d#T#o0dX6|U!bPVX!Q!R7`!R![7`!c!i7`!i!}0d#R#S0d#T#o0dX7gU!bPVX!Q!R7y!R![7y!c!i7y!i!}0d#R#S0d#T#o0dX8QU!bPVX!Q!R8d!R![8d!c!i8d!i!}0d#R#S0d#T#o0dX8kU!bPVX!Q!R8}!R![8}!c!i8}!i!}0d#R#S0d#T#o0dX9UV!bPVX!O!P9k!Q!R:o!R![:o!c!i:o!i!}0d#R#S0d#T#o0dP9nQ!Q![9t!c!i9tP9yQ!bP!Q![:P!c!i:PP:UQ!bP!Q![:[!c!i:[P:aQ!bP!Q![:g!c!i:gP:lP!bP!O!P9kX:vU!bPVX!Q!R:o!R![:o!c!i:o!i!}0d#R#S0d#T#o0d!a;e[$pp$hS$m`bP!O!P.r!Q!R^!X![eWZQbP!O!P.r!Q!R spec_Identifier[value] || -1, - }], - tokenPrec: 3059, -}); + topRules: {"Specification":[0,3]}, + specialized: [{term: 7, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}], + tokenPrec: 4288 +}) diff --git a/src/lezer/props/style-tags-node-prop-source.ts b/src/lezer/props/style-tags-node-prop-source.ts index cfa090e..8e93e9d 100644 --- a/src/lezer/props/style-tags-node-prop-source.ts +++ b/src/lezer/props/style-tags-node-prop-source.ts @@ -12,6 +12,7 @@ const tokenIdToStyleTagMapping: { [selector: string]: Tag | readonly Tag[] } = Object.entries(TokenTypeId).forEach(([key, value]) => { switch (value) { case TokenTypeId.int: + case TokenTypeId.signed: case TokenTypeId.unsigned: case TokenTypeId.float: case TokenTypeId.bit: diff --git a/src/lezer/props/syntactic-token-node-prop-source.ts b/src/lezer/props/syntactic-token-node-prop-source.ts index 47fea5b..cd40a99 100644 --- a/src/lezer/props/syntactic-token-node-prop-source.ts +++ b/src/lezer/props/syntactic-token-node-prop-source.ts @@ -34,6 +34,7 @@ Object.values(TokenTypeId).forEach((value) => { case TokenTypeId.int: tokenIdToSyntaxStringMapping.set(value, "int"); break; + case TokenTypeId.signed: case TokenTypeId.unsigned: tokenIdToSyntaxStringMapping.set(value, "unsigned"); break; diff --git a/tests/sample-specifications/const-arrays-fixed.sdl b/tests/sample-specifications/const-arrays-fixed.sdl new file mode 100644 index 0000000..b21d446 --- /dev/null +++ b/tests/sample-specifications/const-arrays-fixed.sdl @@ -0,0 +1,30 @@ +// Test file demonstrating const array support (previously broken, now fixed) +// This file tests const-qualified arrays which were not supported in the original parser + +aligned(8) class ConstArrayTests { + // Basic const arrays - these were failing before the fix + const unsigned int(32) reserved_array[2]; + const int(16) const_samples[1024]; + const float(32) const_values[100]; + + // Const arrays with different types + const bit(8) flags[8]; + const unsigned int(4) nibbles[16]; + const int(64) large_const_array[256]; + + // Const arrays with alignment modifiers + const aligned(16) unsigned int(32) aligned_const_array[4]; + const aligned(32) float(64) double_precision_const[8]; + + // Mixed const and non-const arrays in same class + unsigned int(32) regular_array[10]; + const unsigned int(32) const_counterpart[10]; + + // Const arrays with legacy/reserved qualifiers + reserved unsigned int(16) reserved_const_array[5]; + legacy int(8) legacy_const_array[3]; + + // Multi-dimensional const arrays + const unsigned int(8) const_matrix[3][3]; + const float(32) const_3d_array[2][2][2]; +} \ No newline at end of file diff --git a/tests/sample-specifications/signed-types-fixed.sdl b/tests/sample-specifications/signed-types-fixed.sdl new file mode 100644 index 0000000..6ab2f5b --- /dev/null +++ b/tests/sample-specifications/signed-types-fixed.sdl @@ -0,0 +1,47 @@ +// Test file demonstrating signed type support (previously broken, now fixed) +// This file tests signed integer types which were not supported in the original parser + +aligned(8) class SignedTypeTests { + // Basic signed types - these were failing before the fix + signed int(16) samples[1024]; + signed int(32) signed_values[100]; + + // Signed types with different bit widths + signed int(8) byte_samples[256]; + signed int(16) short_samples[512]; + signed int(32) int_samples[1024]; + signed int(64) long_samples[128]; + + // Signed types with const qualifier + const signed int(16) const_signed_array[50]; + const signed int(32) signed_constants[10]; + + // Signed types with alignment modifiers + aligned(16) signed int(32) aligned_signed_array[8]; + aligned(32) signed int(64) double_aligned_signed[4]; + + // Mixed signed and unsigned types + signed int(16) signed_data[100]; + unsigned int(16) unsigned_data[100]; + + // Signed types in expressions + signed int(32) result = signed_value1 + signed_value2; + signed int(32) difference = signed_value1 - signed_value2; + signed int(32) product = signed_value1 * signed_value2; + + // Signed types with bitwise operations + signed int(16) signed_and = signed_val1 & signed_val2; + signed int(16) signed_or = signed_val1 | signed_val2; + + // Signed types with shift operations + signed int(16) signed_shift_left = signed_val << 2; + signed int(16) signed_shift_right = signed_val >> 1; + + // Signed types in multi-dimensional arrays + signed int(16) signed_matrix[3][3]; + signed int(32) signed_3d_array[2][2][2]; + + // Signed types with legacy/reserved qualifiers + reserved signed int(16) reserved_signed_array[5]; + legacy signed int(8) legacy_signed_array[3]; +} \ No newline at end of file