@mpeggroup/mpeg-sdl-parser 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +337 -0
  3. package/bun.lock +65 -0
  4. package/dist/index.js +11829 -0
  5. package/grammar/sdl.ebnf.grammar +399 -0
  6. package/grammar/sdl.lezer.grammar +629 -0
  7. package/index.ts +83 -0
  8. package/package.json +61 -0
  9. package/src/analyser/checks/check-array-definition.ts +90 -0
  10. package/src/analyser/checks/check-array-element-access.ts +31 -0
  11. package/src/analyser/checks/check-class-declaration.ts +417 -0
  12. package/src/analyser/checks/check-computed-array-definition.ts +44 -0
  13. package/src/analyser/checks/check-computed-elementary-type-definition.ts +45 -0
  14. package/src/analyser/checks/check-elementary-type-definition.ts +167 -0
  15. package/src/analyser/checks/check-expression-binary.ts +242 -0
  16. package/src/analyser/checks/check-expression-lengthof.ts +34 -0
  17. package/src/analyser/checks/check-expression-unary.ts +166 -0
  18. package/src/analyser/checks/check-identifier.ts +71 -0
  19. package/src/analyser/checks/check-if-statement.ts +164 -0
  20. package/src/analyser/checks/check-map-declaration.ts +180 -0
  21. package/src/analyser/checks/check-map-definition.ts +118 -0
  22. package/src/analyser/checks/check-number-literal-float.ts +28 -0
  23. package/src/analyser/checks/check-parameter-list.ts +42 -0
  24. package/src/analyser/checks/check-specification.ts +53 -0
  25. package/src/analyser/checks/check-switch-statement.ts +206 -0
  26. package/src/analyser/checks/check.ts +20 -0
  27. package/src/analyser/create-sdl-analyser.ts +85 -0
  28. package/src/analyser/node-handler/abstract-analysis-node-handler.ts +626 -0
  29. package/src/analyser/node-handler/build-symbol-table-node-handler.ts +649 -0
  30. package/src/analyser/node-handler/specific-check-node-handler.ts +46 -0
  31. package/src/analyser/node-handler/validate-scope-node-handler.ts +290 -0
  32. package/src/analyser/node-handler/validate-type-node-handler.ts +497 -0
  33. package/src/analyser/sdl-analyser.ts +119 -0
  34. package/src/analyser/symbol-table.ts +388 -0
  35. package/src/analyser/util/symbol-table-utils.ts +458 -0
  36. package/src/analyser/util/type-utils.ts +238 -0
  37. package/src/ast/build/consume/consume-abstract-node.ts +199 -0
  38. package/src/ast/build/consume/consume-ast-node.ts +400 -0
  39. package/src/ast/build/consume/consume-primitive.ts +59 -0
  40. package/src/ast/build/consume/consume-trivia.ts +96 -0
  41. package/src/ast/build/consume/consume-white-space-and-missing-errors.ts +27 -0
  42. package/src/ast/build/node/build-aggregate-output-value.ts +57 -0
  43. package/src/ast/build/node/build-aligned-modifier.ts +99 -0
  44. package/src/ast/build/node/build-array-definition.ts +131 -0
  45. package/src/ast/build/node/build-array-element-access.ts +45 -0
  46. package/src/ast/build/node/build-base64-string-literal.ts +41 -0
  47. package/src/ast/build/node/build-binary-expression.ts +113 -0
  48. package/src/ast/build/node/build-binary-literal.ts +37 -0
  49. package/src/ast/build/node/build-bit-modifier.ts +86 -0
  50. package/src/ast/build/node/build-case-clause.ts +101 -0
  51. package/src/ast/build/node/build-class-declaration.ts +124 -0
  52. package/src/ast/build/node/build-class-definition.ts +56 -0
  53. package/src/ast/build/node/build-class-id-range.ts +32 -0
  54. package/src/ast/build/node/build-class-id.ts +19 -0
  55. package/src/ast/build/node/build-class-member-access.ts +27 -0
  56. package/src/ast/build/node/build-compound-statement.ts +33 -0
  57. package/src/ast/build/node/build-computed-array-definition.ts +53 -0
  58. package/src/ast/build/node/build-computed-elementary-type-definition.ts +100 -0
  59. package/src/ast/build/node/build-decimal-literal.ts +15 -0
  60. package/src/ast/build/node/build-default-clause.ts +76 -0
  61. package/src/ast/build/node/build-do-statement.ts +71 -0
  62. package/src/ast/build/node/build-elementary-type-definition.ts +164 -0
  63. package/src/ast/build/node/build-elementary-type-output-value.ts +25 -0
  64. package/src/ast/build/node/build-elementary-type.ts +36 -0
  65. package/src/ast/build/node/build-expandable-modifier.ts +68 -0
  66. package/src/ast/build/node/build-explicit-array-dimension.ts +37 -0
  67. package/src/ast/build/node/build-expression-statement.ts +31 -0
  68. package/src/ast/build/node/build-extended-class-id-range.ts +27 -0
  69. package/src/ast/build/node/build-extends-modifier.ts +41 -0
  70. package/src/ast/build/node/build-floating-point-literal.ts +15 -0
  71. package/src/ast/build/node/build-for-statement.ts +117 -0
  72. package/src/ast/build/node/build-hexadecimal-literal.ts +38 -0
  73. package/src/ast/build/node/build-identifier.ts +8 -0
  74. package/src/ast/build/node/build-if-statement.ts +82 -0
  75. package/src/ast/build/node/build-implicit-array-dimension.ts +78 -0
  76. package/src/ast/build/node/build-integer-literal.ts +15 -0
  77. package/src/ast/build/node/build-length-attribute.ts +48 -0
  78. package/src/ast/build/node/build-lengthof-expression.ts +45 -0
  79. package/src/ast/build/node/build-map-declaration.ts +110 -0
  80. package/src/ast/build/node/build-map-definition.ts +103 -0
  81. package/src/ast/build/node/build-map-entry.ts +33 -0
  82. package/src/ast/build/node/build-missing-error.ts +10 -0
  83. package/src/ast/build/node/build-multiple-character-literal.ts +65 -0
  84. package/src/ast/build/node/build-parameter-list.ts +50 -0
  85. package/src/ast/build/node/build-parameter-value-list.ts +54 -0
  86. package/src/ast/build/node/build-parameter.ts +47 -0
  87. package/src/ast/build/node/build-partial-array-dimension.ts +55 -0
  88. package/src/ast/build/node/build-specification.ts +24 -0
  89. package/src/ast/build/node/build-string-definition.ts +106 -0
  90. package/src/ast/build/node/build-switch-statement.ts +84 -0
  91. package/src/ast/build/node/build-token.ts +26 -0
  92. package/src/ast/build/node/build-unary-expression.ts +109 -0
  93. package/src/ast/build/node/build-unexpected-error.ts +14 -0
  94. package/src/ast/build/node/build-utf-string-literal.ts +110 -0
  95. package/src/ast/build/node/build-while-statement.ts +55 -0
  96. package/src/ast/build/util/array-dimension-kind-by-token-type-id-map.ts +167 -0
  97. package/src/ast/build/util/binary-operator-kind-by-token-type-id-map.ts +152 -0
  98. package/src/ast/build/util/build-context.ts +36 -0
  99. package/src/ast/build/util/class-id-kind-by-token-type-id-map.ts +160 -0
  100. package/src/ast/build/util/expression-kind-by-token-type-id-map.ts +168 -0
  101. package/src/ast/build/util/fetch-node.ts +433 -0
  102. package/src/ast/build/util/node-kind-by-token-type-id-map.ts +202 -0
  103. package/src/ast/build/util/statement-kind-by-token-type-id-map.ts +210 -0
  104. package/src/ast/build/util/string-literal-kind-by-token-type-id-map.ts +162 -0
  105. package/src/ast/build/util/token-kind-by-token-type-id-map.ts +337 -0
  106. package/src/ast/build-ast.ts +114 -0
  107. package/src/ast/node/abstract-array-definition.ts +17 -0
  108. package/src/ast/node/abstract-array-dimension.ts +20 -0
  109. package/src/ast/node/abstract-class-id.ts +13 -0
  110. package/src/ast/node/abstract-composite-node.ts +58 -0
  111. package/src/ast/node/abstract-elementary-type-definition.ts +29 -0
  112. package/src/ast/node/abstract-expression.ts +13 -0
  113. package/src/ast/node/abstract-leaf-node.ts +10 -0
  114. package/src/ast/node/abstract-node.ts +16 -0
  115. package/src/ast/node/abstract-statement.ts +13 -0
  116. package/src/ast/node/aggregate-output-value.ts +28 -0
  117. package/src/ast/node/aligned-modifier.ts +21 -0
  118. package/src/ast/node/array-definition.ts +44 -0
  119. package/src/ast/node/array-element-access.ts +24 -0
  120. package/src/ast/node/binary-expression.ts +28 -0
  121. package/src/ast/node/bit-modifier.ts +24 -0
  122. package/src/ast/node/case-clause.ts +30 -0
  123. package/src/ast/node/class-declaration.ts +39 -0
  124. package/src/ast/node/class-definition.ts +23 -0
  125. package/src/ast/node/class-id-range.ts +17 -0
  126. package/src/ast/node/class-id.ts +14 -0
  127. package/src/ast/node/class-member-access.ts +19 -0
  128. package/src/ast/node/compound-statement.ts +19 -0
  129. package/src/ast/node/computed-array-definition.ts +26 -0
  130. package/src/ast/node/computed-elementary-type-definition.ts +34 -0
  131. package/src/ast/node/default-clause.ts +26 -0
  132. package/src/ast/node/do-statement.ts +28 -0
  133. package/src/ast/node/elementary-type-definition.ts +49 -0
  134. package/src/ast/node/elementary-type-output-value.ts +19 -0
  135. package/src/ast/node/elementary-type.ts +18 -0
  136. package/src/ast/node/enum/array-dimension-kind.ts +11 -0
  137. package/src/ast/node/enum/binary-operator-kind.ts +41 -0
  138. package/src/ast/node/enum/class-id-kind.ts +12 -0
  139. package/src/ast/node/enum/elementary-type-kind.ts +13 -0
  140. package/src/ast/node/enum/expression-kind.ts +11 -0
  141. package/src/ast/node/enum/node-kind.ts +57 -0
  142. package/src/ast/node/enum/number-literal-kind.ts +17 -0
  143. package/src/ast/node/enum/statement-kind.ts +37 -0
  144. package/src/ast/node/enum/string-literal-kind.ts +13 -0
  145. package/src/ast/node/enum/string-variable-kind.ts +25 -0
  146. package/src/ast/node/enum/token-kind.ts +87 -0
  147. package/src/ast/node/expandable-modifier.ts +21 -0
  148. package/src/ast/node/explicit-array-dimension.ts +26 -0
  149. package/src/ast/node/expression-statement.ts +23 -0
  150. package/src/ast/node/extended-class-id-range.ts +20 -0
  151. package/src/ast/node/extends-modifier.ts +21 -0
  152. package/src/ast/node/for-statement.ts +29 -0
  153. package/src/ast/node/identifier.ts +12 -0
  154. package/src/ast/node/if-statement.ts +28 -0
  155. package/src/ast/node/implicit-array-dimension.ts +34 -0
  156. package/src/ast/node/length-attribute.ts +24 -0
  157. package/src/ast/node/length-of-expression.ts +21 -0
  158. package/src/ast/node/map-declaration.ts +34 -0
  159. package/src/ast/node/map-definition.ts +27 -0
  160. package/src/ast/node/map-entry.ts +18 -0
  161. package/src/ast/node/missing-error.ts +9 -0
  162. package/src/ast/node/number-literal.ts +18 -0
  163. package/src/ast/node/parameter-list.ts +25 -0
  164. package/src/ast/node/parameter-value-list.ts +29 -0
  165. package/src/ast/node/parameter.ts +20 -0
  166. package/src/ast/node/partial-array-dimension.ts +28 -0
  167. package/src/ast/node/specification.ts +21 -0
  168. package/src/ast/node/string-definition.ts +28 -0
  169. package/src/ast/node/string-literal.ts +21 -0
  170. package/src/ast/node/switch-statement.ts +32 -0
  171. package/src/ast/node/token.ts +20 -0
  172. package/src/ast/node/trivia.ts +13 -0
  173. package/src/ast/node/unary-expression.ts +31 -0
  174. package/src/ast/node/unexpected-error.ts +12 -0
  175. package/src/ast/node/while-statement.ts +26 -0
  176. package/src/ast/util/types.ts +138 -0
  177. package/src/ast/visitor/node-handler.ts +15 -0
  178. package/src/ast/visitor/node-visitor.ts +13 -0
  179. package/src/ast/visitor/traversing-visitor.ts +69 -0
  180. package/src/completion/completion-rules.ts +447 -0
  181. package/src/completion/get-potential-syntactic-tokens.ts +54 -0
  182. package/src/completion/get-potential-token-type-ids.ts +116 -0
  183. package/src/completion/hierarchical-map.ts +43 -0
  184. package/src/completion/rules/abstract-types.ts +174 -0
  185. package/src/completion/rules/aggregate-output-value-rules.ts +48 -0
  186. package/src/completion/rules/aligned-modifier-rules.ts +45 -0
  187. package/src/completion/rules/array-definition-rules.ts +87 -0
  188. package/src/completion/rules/array-element-access-rules.ts +22 -0
  189. package/src/completion/rules/assignment-expression-rules.ts +19 -0
  190. package/src/completion/rules/binary-expression-rules.ts +23 -0
  191. package/src/completion/rules/bit-modifier-rules.ts +25 -0
  192. package/src/completion/rules/case-clause-rules.ts +39 -0
  193. package/src/completion/rules/class-declaration-rules.ts +81 -0
  194. package/src/completion/rules/class-definition-rules.ts +28 -0
  195. package/src/completion/rules/class-id-range-rules.ts +17 -0
  196. package/src/completion/rules/class-id-rules.ts +9 -0
  197. package/src/completion/rules/class-member-access-rules.ts +7 -0
  198. package/src/completion/rules/compound-statement-rules.ts +25 -0
  199. package/src/completion/rules/computed-array-definition-rules.ts +25 -0
  200. package/src/completion/rules/computed-elementary-type-rules.ts +44 -0
  201. package/src/completion/rules/default-clause-rules.ts +23 -0
  202. package/src/completion/rules/do-statement-rules.ts +38 -0
  203. package/src/completion/rules/elementary-type-definition-rules.ts +62 -0
  204. package/src/completion/rules/elementary-type-output-value-rules.ts +13 -0
  205. package/src/completion/rules/elementary-type-rules.ts +18 -0
  206. package/src/completion/rules/expandable-modifier-rules.ts +21 -0
  207. package/src/completion/rules/explicit-array-dimension-rules.ts +22 -0
  208. package/src/completion/rules/expression-statement-rules.ts +22 -0
  209. package/src/completion/rules/extended-class-id-range-rules.ts +17 -0
  210. package/src/completion/rules/extends-modifier-rules.ts +17 -0
  211. package/src/completion/rules/for-statement-rules.ts +51 -0
  212. package/src/completion/rules/if-statement-rules.ts +42 -0
  213. package/src/completion/rules/implicit-array-dimension-rules.ts +21 -0
  214. package/src/completion/rules/length-attribute-rules.ts +19 -0
  215. package/src/completion/rules/lengthof-expression-rules.ts +23 -0
  216. package/src/completion/rules/map-declaration-rules.ts +45 -0
  217. package/src/completion/rules/map-definition-rules.ts +46 -0
  218. package/src/completion/rules/map-entry-rules.ts +17 -0
  219. package/src/completion/rules/parameter-list-rules.ts +21 -0
  220. package/src/completion/rules/parameter-rules.ts +17 -0
  221. package/src/completion/rules/parameter-value-list-rules.ts +27 -0
  222. package/src/completion/rules/partial-array-dimension-rules.ts +33 -0
  223. package/src/completion/rules/specification-rules.ts +37 -0
  224. package/src/completion/rules/string-definition-rules.ts +103 -0
  225. package/src/completion/rules/switch-statement-rules.ts +50 -0
  226. package/src/completion/rules/unary-expression-rules.ts +41 -0
  227. package/src/completion/rules/utf-string-literal-rules.ts +17 -0
  228. package/src/completion/rules/while-statement-rules.ts +38 -0
  229. package/src/lezer/context-tracker.ts +45 -0
  230. package/src/lezer/create-sdl-parser.ts +88 -0
  231. package/src/lezer/create-syntax-error-from-text-and-cursor.ts +110 -0
  232. package/src/lezer/create-syntax-error-from-text-and-position.ts +36 -0
  233. package/src/lezer/parser.terms.ts +129 -0
  234. package/src/lezer/parser.ts +63 -0
  235. package/src/lezer/props/fold-node-prop-source.ts +27 -0
  236. package/src/lezer/props/primitive-node-prop-source.ts +19 -0
  237. package/src/lezer/props/style-tags-node-prop-source.ts +188 -0
  238. package/src/lezer/props/syntactic-token-node-prop-source.ts +298 -0
  239. package/src/lezer/sdl-string-input.ts +46 -0
  240. package/src/location.ts +13 -0
  241. package/src/parse-helper.ts +93 -0
  242. package/src/prettier/prettier-plugin-sdl.ts +89 -0
  243. package/src/prettier/print-abstract-array-dimension.ts +84 -0
  244. package/src/prettier/print-abstract-class-id.ts +53 -0
  245. package/src/prettier/print-abstract-expression.ts +168 -0
  246. package/src/prettier/print-abstract-node.ts +224 -0
  247. package/src/prettier/print-abstract-statement.ts +124 -0
  248. package/src/prettier/print-aggregate-output-value.ts +35 -0
  249. package/src/prettier/print-aligned-modifier.ts +50 -0
  250. package/src/prettier/print-array-definition.ts +95 -0
  251. package/src/prettier/print-array-element-access.ts +14 -0
  252. package/src/prettier/print-bit-modifier.ts +48 -0
  253. package/src/prettier/print-case-clause.ts +58 -0
  254. package/src/prettier/print-class-declaration.ts +99 -0
  255. package/src/prettier/print-class-definition.ts +44 -0
  256. package/src/prettier/print-class-member-access.ts +13 -0
  257. package/src/prettier/print-computed-array-definition.ts +33 -0
  258. package/src/prettier/print-computed-elementary-type-definition.ts +60 -0
  259. package/src/prettier/print-default-clause.ts +39 -0
  260. package/src/prettier/print-do-statement.ts +31 -0
  261. package/src/prettier/print-elementary-type-definition.ts +108 -0
  262. package/src/prettier/print-elementary-type-output-value.ts +13 -0
  263. package/src/prettier/print-elementary-type.ts +28 -0
  264. package/src/prettier/print-expandable-modifier.ts +41 -0
  265. package/src/prettier/print-extends-modifier.ts +29 -0
  266. package/src/prettier/print-for-statement.ts +64 -0
  267. package/src/prettier/print-identifier.ts +10 -0
  268. package/src/prettier/print-if-statement.ts +76 -0
  269. package/src/prettier/print-length-attribute.ts +14 -0
  270. package/src/prettier/print-map-declaration.ts +75 -0
  271. package/src/prettier/print-map-definition.ts +67 -0
  272. package/src/prettier/print-map-entry.ts +22 -0
  273. package/src/prettier/print-number-literal.ts +84 -0
  274. package/src/prettier/print-parameter-list.ts +20 -0
  275. package/src/prettier/print-parameter-value-list.ts +20 -0
  276. package/src/prettier/print-parameter.ts +34 -0
  277. package/src/prettier/print-specification.ts +51 -0
  278. package/src/prettier/print-string-definition.ts +114 -0
  279. package/src/prettier/print-string-literal.ts +57 -0
  280. package/src/prettier/print-switch-statement.ts +46 -0
  281. package/src/prettier/print-token.ts +7 -0
  282. package/src/prettier/print-unexpected-error.ts +10 -0
  283. package/src/prettier/print-while-statement.ts +26 -0
  284. package/src/prettier/util/print-utils.ts +607 -0
  285. package/src/prettier/util/types.ts +40 -0
  286. package/src/scanner-error.ts +65 -0
  287. package/src/util/location-utils.ts +16 -0
  288. package/src/util/logger.ts +165 -0
  289. package/tests/analyser/create-sdl-analyser.test.ts +54 -0
  290. package/tests/analyser/get-sdl-analyser-test-scenarios.ts +80 -0
  291. package/tests/analyser/sdl-analyser-scenarios.test.ts +67 -0
  292. package/tests/analyser/semantic-error-scenarios.test.ts +40 -0
  293. package/tests/analyser/symbol-table.test.ts +188 -0
  294. package/tests/analyser/test-cases/array_definition.txt +50 -0
  295. package/tests/analyser/test-cases/class_declaration.txt +112 -0
  296. package/tests/analyser/test-cases/class_definition.txt +60 -0
  297. package/tests/analyser/test-cases/compound_statement.txt +63 -0
  298. package/tests/analyser/test-cases/computed_array_definition.txt +12 -0
  299. package/tests/analyser/test-cases/computed_elementary_type_definition.txt +39 -0
  300. package/tests/analyser/test-cases/do_statement.txt +16 -0
  301. package/tests/analyser/test-cases/elementary_type_definition.txt +58 -0
  302. package/tests/analyser/test-cases/expression.txt +159 -0
  303. package/tests/analyser/test-cases/for_statement.txt +55 -0
  304. package/tests/analyser/test-cases/if_statement.txt +57 -0
  305. package/tests/analyser/test-cases/map_declaration.txt +89 -0
  306. package/tests/analyser/test-cases/map_definition.txt +35 -0
  307. package/tests/analyser/test-cases/number_literal.txt +31 -0
  308. package/tests/analyser/test-cases/parameter_list.txt +16 -0
  309. package/tests/analyser/test-cases/scopes.txt +239 -0
  310. package/tests/analyser/test-cases/specification.txt +28 -0
  311. package/tests/analyser/test-cases/string_definition.txt +40 -0
  312. package/tests/analyser/test-cases/switch_statement.txt +96 -0
  313. package/tests/analyser/test-cases/while_statement.txt +16 -0
  314. package/tests/analyser/util/symbol-table-utils.test.ts +65 -0
  315. package/tests/ast/__snapshots__/build-ast.test.ts.snap +38897 -0
  316. package/tests/ast/build-ast.test.ts +463 -0
  317. package/tests/ast/visitor/traversing-visitor.test.ts +36 -0
  318. package/tests/completion/get-potential-syntactic-tokens.test.ts +89 -0
  319. package/tests/completion/get-potential-token-type-ids.test.ts +76 -0
  320. package/tests/completion/test-potential-syntactic-tokens-scenario.ts +24 -0
  321. package/tests/completion/test-potential-token-type-ids-scenario.ts +33 -0
  322. package/tests/fixtures/history-recording-node-handler.ts +232 -0
  323. package/tests/lezer/create-parse-error-from-text-and-position.test.ts +129 -0
  324. package/tests/lezer/create-sdl-parser.test.ts +15 -0
  325. package/tests/lezer/sdl-parser-scenarios.test.ts +24 -0
  326. package/tests/lezer/sdl-string-input.test.ts +12 -0
  327. package/tests/lezer/syntax-error-scenarios.test.ts +114 -0
  328. package/tests/lezer/test-cases/array_definition.txt +109 -0
  329. package/tests/lezer/test-cases/class_declaration.txt +141 -0
  330. package/tests/lezer/test-cases/class_definition.txt +89 -0
  331. package/tests/lezer/test-cases/comment.txt +335 -0
  332. package/tests/lezer/test-cases/compound_statement.txt +109 -0
  333. package/tests/lezer/test-cases/computed_array_definition.txt +33 -0
  334. package/tests/lezer/test-cases/computed_elementary_type_definition.txt +59 -0
  335. package/tests/lezer/test-cases/do_statement.txt +48 -0
  336. package/tests/lezer/test-cases/elementary_type_definition.txt +158 -0
  337. package/tests/lezer/test-cases/expression.txt +1203 -0
  338. package/tests/lezer/test-cases/for_statement.txt +183 -0
  339. package/tests/lezer/test-cases/if_statement.txt +183 -0
  340. package/tests/lezer/test-cases/invalid.txt +97 -0
  341. package/tests/lezer/test-cases/map_declaration.txt +152 -0
  342. package/tests/lezer/test-cases/map_definition.txt +59 -0
  343. package/tests/lezer/test-cases/number_literal.txt +273 -0
  344. package/tests/lezer/test-cases/specification.txt +38 -0
  345. package/tests/lezer/test-cases/string_definition.txt +263 -0
  346. package/tests/lezer/test-cases/string_literal.txt +303 -0
  347. package/tests/lezer/test-cases/switch_statement.txt +407 -0
  348. package/tests/lezer/test-cases/while_statement.txt +45 -0
  349. package/tests/parse-helper.test.ts +361 -0
  350. package/tests/prettier/__snapshots__/prettier-plugin-sdl.test.ts.snap +127 -0
  351. package/tests/prettier/prettier-plugin-sdl.test.ts +58 -0
  352. package/tests/prettier/print-array.test.ts +29 -0
  353. package/tests/prettier/print-class.test.ts +15 -0
  354. package/tests/prettier/print-do.test.ts +25 -0
  355. package/tests/prettier/print-elementary-type.test.ts +62 -0
  356. package/tests/prettier/print-error.test.ts +40 -0
  357. package/tests/prettier/print-expression.test.ts +17 -0
  358. package/tests/prettier/print-for.test.ts +23 -0
  359. package/tests/prettier/print-if.test.ts +71 -0
  360. package/tests/prettier/print-number-literal.test.ts +28 -0
  361. package/tests/prettier/print-specification.test.ts +54 -0
  362. package/tests/prettier/print-string.test.ts +36 -0
  363. package/tests/prettier/print-switch.test.ts +69 -0
  364. package/tests/prettier/print-while.test.ts +23 -0
  365. package/tests/prettier/test-prettier-scenario.ts +41 -0
  366. package/tests/prettier/util/print-utils.test.ts +665 -0
  367. package/tests/prettier/util/types.test.ts +38 -0
  368. package/tests/sample-specifications/invalid.sdl +24 -0
  369. package/tests/sample-specifications/prettified-invalid.sdl +28 -0
  370. package/tests/sample-specifications/prettified-various-elements-narrow.sdl +97 -0
  371. package/tests/sample-specifications/prettified-various-elements.sdl +90 -0
  372. package/tests/sample-specifications/sample.sdl +24 -0
  373. package/tests/sample-specifications/various-elements.sdl +88 -0
  374. package/tests/util/logger.test.ts +36 -0
  375. package/tsconfig.json +29 -0
@@ -0,0 +1,50 @@
1
+ # Simple
2
+
3
+ class A {int(3) a[3];}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ members:
11
+ a VARIABLE INTEGER []
12
+ a VARIABLE INTEGER []
13
+
14
+
15
+ # Reserved multiple dimensions with mixed explicit and partial dimensions
16
+
17
+ class MyClass{}
18
+ class A {reserved MyClass a[3][[2]];}
19
+
20
+ ==>
21
+
22
+ [GLOBAL]:
23
+ MyClass CLASS
24
+ A CLASS
25
+ [CLASS] MyClass:
26
+ [CLASS] A:
27
+ members:
28
+ a VARIABLE (class: MyClass) []
29
+ a VARIABLE (class: MyClass) []
30
+
31
+
32
+ # Implicit dimension
33
+
34
+ class MyClass{}
35
+ class A {MyClass a[1..3];}
36
+
37
+ ==>
38
+
39
+ [GLOBAL]:
40
+ MyClass CLASS
41
+ A CLASS
42
+ [CLASS] MyClass:
43
+ [CLASS] A:
44
+ members:
45
+ a VARIABLE (class: MyClass) []
46
+ a VARIABLE (class: MyClass) []
47
+
48
+ errors:
49
+
50
+ SEMANTIC ERROR: Implicit arrays can only contain classes which have a classId defined.
@@ -0,0 +1,112 @@
1
+ # Simple class declaration
2
+
3
+ class A{}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+
11
+
12
+ # Single parameter with single id
13
+
14
+ class A(int a) {}
15
+
16
+ ==>
17
+
18
+ [GLOBAL]:
19
+ A CLASS
20
+ [CLASS] A:
21
+ members:
22
+ a VARIABLE INTEGER
23
+ a VARIABLE INTEGER
24
+
25
+ errors:
26
+
27
+ SEMANTIC ERROR: A parameter in a parameter list must be referenced within the class declaration.
28
+
29
+ # All features
30
+
31
+ class C{}
32
+ aligned(8) expandable(20) abstract class A (int a, B b) extends C(1, d) : bit(3) id=1..2,5 {}
33
+
34
+ ==>
35
+
36
+ [GLOBAL]:
37
+ C CLASS
38
+ A CLASS
39
+ [CLASS] C:
40
+ [CLASS] A:
41
+ members:
42
+ sizeOfInstance VARIABLE INTEGER COMPUTED CONST
43
+ a VARIABLE INTEGER
44
+ b VARIABLE (class: B)
45
+ sizeOfInstance VARIABLE INTEGER COMPUTED CONST
46
+ a VARIABLE INTEGER
47
+ b VARIABLE (class: B)
48
+
49
+ errors:
50
+
51
+ SEMANTIC ERROR: Identifier: d is not declared
52
+ SEMANTIC ERROR: Because the class is expandable, it has an encoded sizeOfInstance value therefore it cannot be abstract.
53
+ SEMANTIC ERROR: A parameter in a parameter list must be referenced within the class declaration.
54
+ SEMANTIC ERROR: A parameter in a parameter list must be referenced within the class declaration.
55
+ SEMANTIC ERROR: The alignment of a class which extends another must not differ from the alignment of the base class.
56
+
57
+ # maxClassSize must be positive
58
+
59
+ expandable(0) class A {}
60
+
61
+ ==>
62
+
63
+ [GLOBAL]:
64
+ A CLASS
65
+ [CLASS] A:
66
+ members:
67
+ sizeOfInstance VARIABLE INTEGER COMPUTED CONST
68
+ sizeOfInstance VARIABLE INTEGER COMPUTED CONST
69
+
70
+ errors:
71
+
72
+ SEMANTIC ERROR: maxClassSize must be a positive integer
73
+
74
+
75
+ # Expandable class cannot be abstract
76
+
77
+ expandable(20) abstract class A {}
78
+
79
+ ==>
80
+
81
+ [GLOBAL]:
82
+ A CLASS
83
+ [CLASS] A:
84
+ members:
85
+ sizeOfInstance VARIABLE INTEGER COMPUTED CONST
86
+ sizeOfInstance VARIABLE INTEGER COMPUTED CONST
87
+
88
+ errors:
89
+
90
+ SEMANTIC ERROR: Because the class is expandable, it has an encoded sizeOfInstance value therefore it cannot be abstract.
91
+
92
+
93
+ # Unreferenced parameter
94
+
95
+ class A(int a, int b) {int(8) c = a;}
96
+
97
+ ==>
98
+
99
+ [GLOBAL]:
100
+ A CLASS
101
+ [CLASS] A:
102
+ members:
103
+ a VARIABLE INTEGER
104
+ b VARIABLE INTEGER
105
+ c VARIABLE INTEGER
106
+ a VARIABLE INTEGER
107
+ b VARIABLE INTEGER
108
+ c VARIABLE INTEGER
109
+
110
+ errors:
111
+
112
+ SEMANTIC ERROR: A parameter in a parameter list must be referenced within the class declaration.
@@ -0,0 +1,60 @@
1
+ # Simple
2
+
3
+ class ClassA {}
4
+ class A {ClassA a;}
5
+
6
+ ==>
7
+
8
+ [GLOBAL]:
9
+ ClassA CLASS
10
+ A CLASS
11
+ [CLASS] ClassA:
12
+ [CLASS] A:
13
+ members:
14
+ a VARIABLE (class: ClassA)
15
+ a VARIABLE (class: ClassA)
16
+
17
+
18
+ # Legacy and one parameter value
19
+
20
+ class ClassB(int a) {}
21
+ class A {legacy ClassB b(3);}
22
+
23
+ ==>
24
+
25
+ [GLOBAL]:
26
+ ClassB CLASS
27
+ A CLASS
28
+ [CLASS] ClassB:
29
+ members:
30
+ a VARIABLE INTEGER
31
+ a VARIABLE INTEGER
32
+ [CLASS] A:
33
+ members:
34
+ b VARIABLE (class: ClassB)
35
+ b VARIABLE (class: ClassB)
36
+
37
+ errors:
38
+
39
+ SEMANTIC ERROR: A parameter in a parameter list must be referenced within the class declaration.
40
+
41
+ # Multiple parameter values
42
+
43
+ class ClassC {}
44
+ class A {ClassC c(i, 3);}
45
+
46
+ ==>
47
+
48
+ [GLOBAL]:
49
+ ClassC CLASS
50
+ A CLASS
51
+ [CLASS] ClassC:
52
+ [CLASS] A:
53
+ members:
54
+ c VARIABLE (class: ClassC)
55
+ c VARIABLE (class: ClassC)
56
+
57
+ errors:
58
+
59
+ SEMANTIC ERROR: Identifier: i is not declared
60
+ SEMANTIC ERROR: Class 'ClassC' does not expect parameters, but 2 provided
@@ -0,0 +1,63 @@
1
+ # Simple
2
+
3
+ class A {{utf8string foo;utf8string bar;}}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ members:
11
+ foo VARIABLE UCS (branch: COMPOUND)
12
+ bar VARIABLE UCS (branch: COMPOUND)
13
+ [BLOCK] COMPOUND:
14
+ foo VARIABLE UCS
15
+ bar VARIABLE UCS
16
+
17
+
18
+ # Nested compound statements
19
+
20
+ class A {{utf8string foo;{ utf8string bar1;utf8string bar2;}}}
21
+
22
+ ==>
23
+
24
+ [GLOBAL]:
25
+ A CLASS
26
+ [CLASS] A:
27
+ members:
28
+ foo VARIABLE UCS (branch: COMPOUND)
29
+ bar1 VARIABLE UCS (branch: COMPOUND/COMPOUND)
30
+ bar2 VARIABLE UCS (branch: COMPOUND/COMPOUND)
31
+ [BLOCK] COMPOUND:
32
+ foo VARIABLE UCS
33
+ [BLOCK] COMPOUND:
34
+ bar1 VARIABLE UCS
35
+ bar2 VARIABLE UCS
36
+
37
+
38
+ # Multiple nested compound statements
39
+
40
+ class A {{utf8string foo;{ utf8string bar1;utf8string bar2;}}{utf8string fooi;{ utf8string bar1i;utf8string bar2i;}}}
41
+
42
+ ==>
43
+
44
+ [GLOBAL]:
45
+ A CLASS
46
+ [CLASS] A:
47
+ members:
48
+ foo VARIABLE UCS (branch: COMPOUND)
49
+ bar1 VARIABLE UCS (branch: COMPOUND/COMPOUND)
50
+ bar2 VARIABLE UCS (branch: COMPOUND/COMPOUND)
51
+ fooi VARIABLE UCS (branch: COMPOUND#1)
52
+ bar1i VARIABLE UCS (branch: COMPOUND#1/COMPOUND)
53
+ bar2i VARIABLE UCS (branch: COMPOUND#1/COMPOUND)
54
+ [BLOCK] COMPOUND:
55
+ foo VARIABLE UCS
56
+ [BLOCK] COMPOUND:
57
+ bar1 VARIABLE UCS
58
+ bar2 VARIABLE UCS
59
+ [BLOCK] COMPOUND#1:
60
+ fooi VARIABLE UCS
61
+ [BLOCK] COMPOUND:
62
+ bar1i VARIABLE UCS
63
+ bar2i VARIABLE UCS
@@ -0,0 +1,12 @@
1
+ # Simple
2
+
3
+ class A {computed int a[3];}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ members:
11
+ a VARIABLE INTEGER COMPUTED []
12
+ a VARIABLE INTEGER COMPUTED []
@@ -0,0 +1,39 @@
1
+ # Simple
2
+
3
+ class A {computed int a;}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ members:
11
+ a VARIABLE INTEGER COMPUTED
12
+ a VARIABLE INTEGER COMPUTED
13
+
14
+
15
+ # Const and value
16
+
17
+ class A {computed const int a=3;}
18
+
19
+ ==>
20
+
21
+ [GLOBAL]:
22
+ A CLASS
23
+ [CLASS] A:
24
+ members:
25
+ a VARIABLE INTEGER COMPUTED CONST
26
+ a VARIABLE INTEGER COMPUTED CONST
27
+
28
+ # Const computed value must be defined
29
+
30
+ computed const int a;
31
+
32
+ ==>
33
+
34
+ [GLOBAL]:
35
+ a VARIABLE INTEGER COMPUTED CONST
36
+
37
+ errors:
38
+
39
+ SEMANTIC ERROR: a: const computed elementary type definition must have a value specified
@@ -0,0 +1,16 @@
1
+ # Simple
2
+
3
+ class A {do {i++;} while (i<3);}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ [BLOCK] DO:
11
+ [BLOCK] COMPOUND:
12
+
13
+ errors:
14
+
15
+ SEMANTIC ERROR: Identifier: i is not declared
16
+ SEMANTIC ERROR: Identifier: i is not declared
@@ -0,0 +1,58 @@
1
+ # Simple
2
+
3
+ class A{int(3) a;}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ members:
11
+ a VARIABLE INTEGER
12
+ a VARIABLE INTEGER
13
+
14
+
15
+ # Legacy, const, aligned, lookahead value range
16
+
17
+ class A{legacy const aligned(8) unsigned int(7)* a=3..i;}
18
+
19
+ ==>
20
+
21
+ [GLOBAL]:
22
+ A CLASS
23
+ [CLASS] A:
24
+ members:
25
+ a VARIABLE INTEGER CONST
26
+ a VARIABLE INTEGER CONST
27
+
28
+ errors:
29
+
30
+ SEMANTIC ERROR: Identifier: i is not declared
31
+
32
+
33
+ # Default aligned
34
+
35
+ class A {aligned int(2) a;}
36
+
37
+ ==>
38
+
39
+ [GLOBAL]:
40
+ A CLASS
41
+ [CLASS] A:
42
+ members:
43
+ a VARIABLE INTEGER
44
+ a VARIABLE INTEGER
45
+
46
+
47
+ # Explicit aligned bit count
48
+
49
+ class A {aligned(16) int(2) a;}
50
+
51
+ ==>
52
+
53
+ [GLOBAL]:
54
+ A CLASS
55
+ [CLASS] A:
56
+ members:
57
+ a VARIABLE INTEGER
58
+ a VARIABLE INTEGER
@@ -0,0 +1,159 @@
1
+ # Number literal with unary plus operator
2
+
3
+ class A {+1;}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+
11
+
12
+ # Identifier with unary negation operator
13
+
14
+ class A {-i;}
15
+
16
+ ==>
17
+
18
+ [GLOBAL]:
19
+ A CLASS
20
+ [CLASS] A:
21
+
22
+ errors:
23
+
24
+ SEMANTIC ERROR: Identifier: i is not declared
25
+
26
+
27
+ # Lengthof operator with unary negation
28
+
29
+ class A {-lengthof(i);}
30
+
31
+ ==>
32
+
33
+ [GLOBAL]:
34
+ A CLASS
35
+ [CLASS] A:
36
+
37
+ errors:
38
+
39
+ SEMANTIC ERROR: Identifier: i is not declared
40
+
41
+
42
+ # Postfix operator
43
+
44
+ class A {i++;}
45
+
46
+ ==>
47
+
48
+ [GLOBAL]:
49
+ A CLASS
50
+ [CLASS] A:
51
+
52
+ errors:
53
+
54
+ SEMANTIC ERROR: Identifier: i is not declared
55
+
56
+
57
+ # Class member access expression
58
+
59
+ class A {a.b;}
60
+
61
+ ==>
62
+
63
+ [GLOBAL]:
64
+ A CLASS
65
+ [CLASS] A:
66
+
67
+ errors:
68
+
69
+ SEMANTIC ERROR: Identifier: a is not declared
70
+
71
+
72
+ # Class member access expression - multiple
73
+
74
+ class A {a.b.c;}
75
+
76
+ ==>
77
+
78
+ [GLOBAL]:
79
+ A CLASS
80
+ [CLASS] A:
81
+
82
+ errors:
83
+
84
+ SEMANTIC ERROR: Identifier: a is not declared
85
+
86
+
87
+ # Array element access expression
88
+
89
+ class A {a[1];}
90
+
91
+ ==>
92
+
93
+ [GLOBAL]:
94
+ A CLASS
95
+ [CLASS] A:
96
+
97
+ errors:
98
+
99
+ SEMANTIC ERROR: Identifier: a is not declared
100
+
101
+
102
+ # Array element access expression multiple
103
+
104
+ class A {a[1][2];}
105
+
106
+ ==>
107
+
108
+ [GLOBAL]:
109
+ A CLASS
110
+ [CLASS] A:
111
+
112
+ errors:
113
+
114
+ SEMANTIC ERROR: Identifier: a is not declared
115
+
116
+
117
+ # Class member access expression with postfix operator
118
+
119
+ class A {a.b++;}
120
+
121
+ ==>
122
+
123
+ [GLOBAL]:
124
+ A CLASS
125
+ [CLASS] A:
126
+
127
+ errors:
128
+
129
+ SEMANTIC ERROR: Identifier: a is not declared
130
+
131
+
132
+ # Array element access expression with postfix operator
133
+
134
+ class A {a[1]++;}
135
+
136
+ ==>
137
+
138
+ [GLOBAL]:
139
+ A CLASS
140
+ [CLASS] A:
141
+
142
+ errors:
143
+
144
+ SEMANTIC ERROR: Identifier: a is not declared
145
+
146
+
147
+ # Class member and array element access expression - multiple mixed
148
+
149
+ class A {a[1][2].b.c[3];}
150
+
151
+ ==>
152
+
153
+ [GLOBAL]:
154
+ A CLASS
155
+ [CLASS] A:
156
+
157
+ errors:
158
+
159
+ SEMANTIC ERROR: Identifier: a is not declared
@@ -0,0 +1,55 @@
1
+ # First expression is expression
2
+
3
+ class A {for (i=1;i<9;i++) {j++;}}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ [BLOCK] FOR:
11
+ [BLOCK] COMPOUND:
12
+
13
+ errors:
14
+
15
+ SEMANTIC ERROR: Identifier: i is not declared
16
+ SEMANTIC ERROR: Identifier: i is not declared
17
+ SEMANTIC ERROR: Identifier: i is not declared
18
+ SEMANTIC ERROR: Identifier: j is not declared
19
+
20
+
21
+ # First expression is computed elementary type definition
22
+
23
+ class A {for (computed int i=1;i<9;i++) {j++;}}
24
+
25
+ ==>
26
+
27
+ [GLOBAL]:
28
+ A CLASS
29
+ [CLASS] A:
30
+ [BLOCK] FOR:
31
+ i VARIABLE INTEGER COMPUTED
32
+ [BLOCK] COMPOUND:
33
+
34
+ errors:
35
+
36
+ SEMANTIC ERROR: Identifier: j is not declared
37
+
38
+
39
+ # First expression is empty
40
+
41
+ class A {for (;i<9;i++) {j++;}}
42
+
43
+ ==>
44
+
45
+ [GLOBAL]:
46
+ A CLASS
47
+ [CLASS] A:
48
+ [BLOCK] FOR:
49
+ [BLOCK] COMPOUND:
50
+
51
+ errors:
52
+
53
+ SEMANTIC ERROR: Identifier: i is not declared
54
+ SEMANTIC ERROR: Identifier: i is not declared
55
+ SEMANTIC ERROR: Identifier: j is not declared
@@ -0,0 +1,57 @@
1
+ # With braces in clauses
2
+
3
+ class A {if(i==1){i++;}else if(i==2){i--;}else{j++;}}
4
+
5
+ ==>
6
+
7
+ [GLOBAL]:
8
+ A CLASS
9
+ [CLASS] A:
10
+ [BLOCK] COMPOUND:
11
+ [BLOCK] COMPOUND#1:
12
+ [BLOCK] COMPOUND#2:
13
+
14
+ errors:
15
+
16
+ SEMANTIC ERROR: Identifier: i is not declared
17
+ SEMANTIC ERROR: Identifier: i is not declared
18
+ SEMANTIC ERROR: Identifier: i is not declared
19
+ SEMANTIC ERROR: Identifier: i is not declared
20
+ SEMANTIC ERROR: Identifier: j is not declared
21
+
22
+
23
+ # No braces and no else if clause
24
+
25
+ class A {if(i==1)i++;else j++;}
26
+
27
+ ==>
28
+
29
+ [GLOBAL]:
30
+ A CLASS
31
+ [CLASS] A:
32
+ [BLOCK] COMPOUND:
33
+ [BLOCK] COMPOUND#1:
34
+
35
+ errors:
36
+
37
+ SEMANTIC ERROR: Identifier: i is not declared
38
+ SEMANTIC ERROR: Identifier: i is not declared
39
+ SEMANTIC ERROR: Identifier: j is not declared
40
+
41
+
42
+ # Two if statements
43
+
44
+ class A{if(x)1;if(y)2;}
45
+
46
+ ==>
47
+
48
+ [GLOBAL]:
49
+ A CLASS
50
+ [CLASS] A:
51
+ [BLOCK] COMPOUND:
52
+ [BLOCK] COMPOUND#1:
53
+
54
+ errors:
55
+
56
+ SEMANTIC ERROR: Identifier: x is not declared
57
+ SEMANTIC ERROR: Identifier: y is not declared