parser-lr 0.4.1 → 0.5.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 (197) hide show
  1. package/README.md +35 -1
  2. package/bin/parser-lr.js +340 -5802
  3. package/bin/parser-lr.js.map +1 -1
  4. package/dist/lib/grammar/grammar-json-path.d.ts +2 -0
  5. package/dist/lib/grammar/grammar-json-path.d.ts.map +1 -0
  6. package/dist/lib/grammar/grammar-json-path.esm.d.ts +5 -0
  7. package/dist/lib/grammar/grammar-json-path.esm.d.ts.map +1 -0
  8. package/dist/lib/grammar/grammar-json-path.esm.js +9 -0
  9. package/dist/lib/grammar/grammar-json-path.esm.js.map +1 -0
  10. package/dist/lib/grammar/grammar-json-path.js +2 -0
  11. package/dist/lib/grammar/grammar-json-path.js.map +1 -0
  12. package/dist/lib/grammar/index.d.ts +2 -0
  13. package/dist/lib/grammar/index.d.ts.map +1 -1
  14. package/dist/lib/grammar/index.js +1 -0
  15. package/dist/lib/grammar/index.js.map +1 -1
  16. package/dist/lib/grammar/meta-grammar-table.d.ts.map +1 -1
  17. package/dist/lib/grammar/meta-grammar-table.js +4 -2
  18. package/dist/lib/grammar/meta-grammar-table.js.map +1 -1
  19. package/dist/lib/grammar/table-validator.d.ts +26 -0
  20. package/dist/lib/grammar/table-validator.d.ts.map +1 -0
  21. package/dist/lib/grammar/table-validator.js +211 -0
  22. package/dist/lib/grammar/table-validator.js.map +1 -0
  23. package/dist/lib/index.d.ts +2 -0
  24. package/dist/lib/index.d.ts.map +1 -1
  25. package/dist/lib/index.js +1 -0
  26. package/dist/lib/index.js.map +1 -1
  27. package/dist/lib/transform/cst-transformer.d.ts +14 -0
  28. package/dist/lib/transform/cst-transformer.d.ts.map +1 -1
  29. package/dist/lib/transform/cst-transformer.js +82 -11
  30. package/dist/lib/transform/cst-transformer.js.map +1 -1
  31. package/dist/lib/transform/grammar-fixture.d.ts +56 -0
  32. package/dist/lib/transform/grammar-fixture.d.ts.map +1 -0
  33. package/dist/lib/transform/grammar-fixture.js +101 -0
  34. package/dist/lib/transform/grammar-fixture.js.map +1 -0
  35. package/dist/lib-cjs/ast/ast-node.js +70 -0
  36. package/dist/lib-cjs/ast/ast-node.js.map +1 -0
  37. package/dist/lib-cjs/errors/index.js +9 -0
  38. package/dist/lib-cjs/errors/index.js.map +1 -0
  39. package/dist/lib-cjs/errors/parser-lr-error.js +52 -0
  40. package/dist/lib-cjs/errors/parser-lr-error.js.map +1 -0
  41. package/dist/lib-cjs/grammar/ast-schema.js +43 -0
  42. package/dist/lib-cjs/grammar/ast-schema.js.map +1 -0
  43. package/dist/lib-cjs/grammar/ast-type.js +3 -0
  44. package/dist/lib-cjs/grammar/ast-type.js.map +1 -0
  45. package/dist/lib-cjs/grammar/expression.js +3 -0
  46. package/dist/lib-cjs/grammar/expression.js.map +1 -0
  47. package/dist/lib-cjs/grammar/grammar-from-cst.js +641 -0
  48. package/dist/lib-cjs/grammar/grammar-from-cst.js.map +1 -0
  49. package/dist/lib-cjs/grammar/grammar-json-path.js +13 -0
  50. package/dist/lib-cjs/grammar/grammar-json-path.js.map +1 -0
  51. package/dist/lib-cjs/grammar/grammar-literals.js +71 -0
  52. package/dist/lib-cjs/grammar/grammar-literals.js.map +1 -0
  53. package/dist/lib-cjs/grammar/grammar.js +64 -0
  54. package/dist/lib-cjs/grammar/grammar.js.map +1 -0
  55. package/dist/lib-cjs/grammar/grammar.json +5760 -0
  56. package/dist/lib-cjs/grammar/index.js +19 -0
  57. package/dist/lib-cjs/grammar/index.js.map +1 -0
  58. package/dist/lib-cjs/grammar/meta-grammar-table.js +39 -0
  59. package/dist/lib-cjs/grammar/meta-grammar-table.js.map +1 -0
  60. package/dist/lib-cjs/grammar/production.js +3 -0
  61. package/dist/lib-cjs/grammar/production.js.map +1 -0
  62. package/dist/lib-cjs/grammar/read-grammar-error.js +22 -0
  63. package/dist/lib-cjs/grammar/read-grammar-error.js.map +1 -0
  64. package/dist/lib-cjs/grammar/read-grammar.js +24 -0
  65. package/dist/lib-cjs/grammar/read-grammar.js.map +1 -0
  66. package/dist/lib-cjs/grammar/table-validator.js +215 -0
  67. package/dist/lib-cjs/grammar/table-validator.js.map +1 -0
  68. package/dist/lib-cjs/grammar/token-rule.js +3 -0
  69. package/dist/lib-cjs/grammar/token-rule.js.map +1 -0
  70. package/dist/lib-cjs/grammar/transform-expression.js +3 -0
  71. package/dist/lib-cjs/grammar/transform-expression.js.map +1 -0
  72. package/dist/lib-cjs/grammar/transform-rule.js +3 -0
  73. package/dist/lib-cjs/grammar/transform-rule.js.map +1 -0
  74. package/dist/lib-cjs/grammar/transform-schema.js +43 -0
  75. package/dist/lib-cjs/grammar/transform-schema.js.map +1 -0
  76. package/dist/lib-cjs/index.js +66 -0
  77. package/dist/lib-cjs/index.js.map +1 -0
  78. package/dist/lib-cjs/lexer/index.js +32 -0
  79. package/dist/lib-cjs/lexer/index.js.map +1 -0
  80. package/dist/lib-cjs/lexer/lexer-compile-error.js +22 -0
  81. package/dist/lib-cjs/lexer/lexer-compile-error.js.map +1 -0
  82. package/dist/lib-cjs/lexer/lexer-compile.js +201 -0
  83. package/dist/lib-cjs/lexer/lexer-compile.js.map +1 -0
  84. package/dist/lib-cjs/lexer/lexer-error.js +22 -0
  85. package/dist/lib-cjs/lexer/lexer-error.js.map +1 -0
  86. package/dist/lib-cjs/lexer/lexer-input-error.js +17 -0
  87. package/dist/lib-cjs/lexer/lexer-input-error.js.map +1 -0
  88. package/dist/lib-cjs/lexer/lexer-state-error.js +19 -0
  89. package/dist/lib-cjs/lexer/lexer-state-error.js.map +1 -0
  90. package/dist/lib-cjs/lexer/lexer.js +278 -0
  91. package/dist/lib-cjs/lexer/lexer.js.map +1 -0
  92. package/dist/lib-cjs/lexer/token.js +44 -0
  93. package/dist/lib-cjs/lexer/token.js.map +1 -0
  94. package/dist/lib-cjs/package.json +3 -0
  95. package/dist/lib-cjs/parse-context-error.js +19 -0
  96. package/dist/lib-cjs/parse-context-error.js.map +1 -0
  97. package/dist/lib-cjs/parse-context.js +137 -0
  98. package/dist/lib-cjs/parse-context.js.map +1 -0
  99. package/dist/lib-cjs/parse-output-error.js +19 -0
  100. package/dist/lib-cjs/parse-output-error.js.map +1 -0
  101. package/dist/lib-cjs/parse-output.js +18 -0
  102. package/dist/lib-cjs/parse-output.js.map +1 -0
  103. package/dist/lib-cjs/parse-table/analysis/first-follow.js +294 -0
  104. package/dist/lib-cjs/parse-table/analysis/first-follow.js.map +1 -0
  105. package/dist/lib-cjs/parse-table/analysis/index.js +9 -0
  106. package/dist/lib-cjs/parse-table/analysis/index.js.map +1 -0
  107. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js +140 -0
  108. package/dist/lib-cjs/parse-table/bnf/bnf-grammar.js.map +1 -0
  109. package/dist/lib-cjs/parse-table/bnf/bnf-production.js +3 -0
  110. package/dist/lib-cjs/parse-table/bnf/bnf-production.js.map +1 -0
  111. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js +39 -0
  112. package/dist/lib-cjs/parse-table/bnf/bnf-symbol.js.map +1 -0
  113. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js +224 -0
  114. package/dist/lib-cjs/parse-table/bnf/desugar-ebnf.js.map +1 -0
  115. package/dist/lib-cjs/parse-table/bnf/index.js +13 -0
  116. package/dist/lib-cjs/parse-table/bnf/index.js.map +1 -0
  117. package/dist/lib-cjs/parse-table/build-lr-table.js +171 -0
  118. package/dist/lib-cjs/parse-table/build-lr-table.js.map +1 -0
  119. package/dist/lib-cjs/parse-table/index.js +49 -0
  120. package/dist/lib-cjs/parse-table/index.js.map +1 -0
  121. package/dist/lib-cjs/parse-table/lr-algorithm-error.js +19 -0
  122. package/dist/lib-cjs/parse-table/lr-algorithm-error.js.map +1 -0
  123. package/dist/lib-cjs/parse-table/lr-algorithm.js +31 -0
  124. package/dist/lib-cjs/parse-table/lr-algorithm.js.map +1 -0
  125. package/dist/lib-cjs/parse-table/lr0/index.js +14 -0
  126. package/dist/lib-cjs/parse-table/lr0/index.js.map +1 -0
  127. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js +286 -0
  128. package/dist/lib-cjs/parse-table/lr0/lr0-item-set.js.map +1 -0
  129. package/dist/lib-cjs/parse-table/lr1/index.js +18 -0
  130. package/dist/lib-cjs/parse-table/lr1/index.js.map +1 -0
  131. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js +432 -0
  132. package/dist/lib-cjs/parse-table/lr1/lr1-item-set.js.map +1 -0
  133. package/dist/lib-cjs/parse-table/parse-table-build-error.js +24 -0
  134. package/dist/lib-cjs/parse-table/parse-table-build-error.js.map +1 -0
  135. package/dist/lib-cjs/parse-table/parse-table-error.js +19 -0
  136. package/dist/lib-cjs/parse-table/parse-table-error.js.map +1 -0
  137. package/dist/lib-cjs/parse-table/parse-table-json.js +12 -0
  138. package/dist/lib-cjs/parse-table/parse-table-json.js.map +1 -0
  139. package/dist/lib-cjs/parse-table/parse-table.js +345 -0
  140. package/dist/lib-cjs/parse-table/parse-table.js.map +1 -0
  141. package/dist/lib-cjs/parse-table/slr/index.js +13 -0
  142. package/dist/lib-cjs/parse-table/slr/index.js.map +1 -0
  143. package/dist/lib-cjs/parse-table/slr/parse-action.js +8 -0
  144. package/dist/lib-cjs/parse-table/slr/parse-action.js.map +1 -0
  145. package/dist/lib-cjs/parse-table/slr/slr-table.js +18 -0
  146. package/dist/lib-cjs/parse-table/slr/slr-table.js.map +1 -0
  147. package/dist/lib-cjs/parse-table/table/index.js +21 -0
  148. package/dist/lib-cjs/parse-table/table/index.js.map +1 -0
  149. package/dist/lib-cjs/parse-table/table/lr-parse-table.js +192 -0
  150. package/dist/lib-cjs/parse-table/table/lr-parse-table.js.map +1 -0
  151. package/dist/lib-cjs/parse-table/table/parse-action.js +54 -0
  152. package/dist/lib-cjs/parse-table/table/parse-action.js.map +1 -0
  153. package/dist/lib-cjs/parse-table/table/table-builder-base.js +153 -0
  154. package/dist/lib-cjs/parse-table/table/table-builder-base.js.map +1 -0
  155. package/dist/lib-cjs/parse-table/token-inventory.js +18 -0
  156. package/dist/lib-cjs/parse-table/token-inventory.js.map +1 -0
  157. package/dist/lib-cjs/parser-lr.js +143 -0
  158. package/dist/lib-cjs/parser-lr.js.map +1 -0
  159. package/dist/lib-cjs/shift-reduce/index.js +11 -0
  160. package/dist/lib-cjs/shift-reduce/index.js.map +1 -0
  161. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js +224 -0
  162. package/dist/lib-cjs/shift-reduce/shift-reduce-engine.js.map +1 -0
  163. package/dist/lib-cjs/transform/binding-map.js +82 -0
  164. package/dist/lib-cjs/transform/binding-map.js.map +1 -0
  165. package/dist/lib-cjs/transform/cst-transformer.js +480 -0
  166. package/dist/lib-cjs/transform/cst-transformer.js.map +1 -0
  167. package/dist/lib-cjs/transform/grammar-fixture.js +109 -0
  168. package/dist/lib-cjs/transform/grammar-fixture.js.map +1 -0
  169. package/dist/lib-cjs/transform/index.js +12 -0
  170. package/dist/lib-cjs/transform/index.js.map +1 -0
  171. package/docs/grammar.md +80 -0
  172. package/docs/parser-lr-enhancement-proposals.md +548 -0
  173. package/grammars/6502.grammar +233 -0
  174. package/grammars/calc.grammar +30 -0
  175. package/grammars/ferrite.grammar +991 -0
  176. package/grammars/fixtures/build-optional/build-optional.grammar +32 -0
  177. package/grammars/fixtures/build-optional/input.txt +1 -0
  178. package/grammars/fixtures/comparison-op/comparison-op.grammar +28 -0
  179. package/grammars/fixtures/comparison-op/input.txt +1 -0
  180. package/grammars/fixtures/flatten-repeat/flatten-repeat.grammar +28 -0
  181. package/grammars/fixtures/flatten-repeat/input.txt +1 -0
  182. package/grammars/fixtures/help-topic/help-topic.grammar +28 -0
  183. package/grammars/fixtures/help-topic/input.txt +1 -0
  184. package/grammars/fixtures/let-target/input.txt +1 -0
  185. package/grammars/fixtures/let-target/let-target.grammar +33 -0
  186. package/grammars/fixtures/pass-preserves-production/bare-terminal/bare-terminal.grammar +24 -0
  187. package/grammars/fixtures/pass-preserves-production/bare-terminal/input.txt +1 -0
  188. package/grammars/fixtures/pass-preserves-production/labeled-variant/input-end-if.txt +1 -0
  189. package/grammars/fixtures/pass-preserves-production/labeled-variant/input-end.txt +1 -0
  190. package/grammars/fixtures/pass-preserves-production/labeled-variant/labeled-variant.grammar +24 -0
  191. package/grammars/fixtures/pass-preserves-production/optional-absent/input.txt +1 -0
  192. package/grammars/fixtures/pass-preserves-production/optional-absent/optional-absent.grammar +24 -0
  193. package/grammars/fixtures/pass-preserves-production/optional-present/input.txt +1 -0
  194. package/grammars/fixtures/pass-preserves-production/optional-present/optional-present.grammar +24 -0
  195. package/grammars/grammar.grammar +428 -0
  196. package/grammars/lisp.grammar +95 -0
  197. package/package.json +9 -4
@@ -0,0 +1,95 @@
1
+ // Very simple Lisp: s-expressions with numbers, symbols, and strings.
2
+ //
3
+ // Example:
4
+ //
5
+ // ; factorial sketch
6
+ // (def factorial (n)
7
+ // (if (= n 0)
8
+ // 1
9
+ // (* n (factorial (- n 1)))))
10
+ //
11
+ // (quote hello)
12
+ // (+ 1 2 3)
13
+
14
+ name "lisp" ;
15
+
16
+ tokens
17
+ lpar = /\(/ ;
18
+ rpar = /\)/ ;
19
+
20
+ number = /[+-]?[0-9]+/ ;
21
+ symbol = /[a-zA-Z+*\-\/=<>?!_][a-zA-Z0-9+*\-\/=<>?!_]*/ ;
22
+ string = /"(?:\\.|[^"\\])*"/ ;
23
+
24
+ skip
25
+ whitespace = /[ \t\r\n]+/ ;
26
+ comment = /;[^\n\r]*/ ;
27
+
28
+ start program ;
29
+
30
+ grammar
31
+ program =
32
+ { [item]:form }
33
+ ;
34
+
35
+ form =
36
+ #list list
37
+ | #atom atom
38
+ ;
39
+
40
+ list =
41
+ [open]:lpar
42
+ { [element]:form }
43
+ [close]:rpar
44
+ ;
45
+
46
+ atom =
47
+ #number [value]:number
48
+ | #symbol [value]:symbol
49
+ | #string [value]:string
50
+ ;
51
+
52
+ ast
53
+ program =
54
+ { form }
55
+ ;
56
+
57
+ form =
58
+ #list list
59
+ | #atom atom
60
+ ;
61
+
62
+ list =
63
+ [open]:lpar
64
+ { [element]:form }
65
+ [close]:rpar
66
+ ;
67
+
68
+ atom =
69
+ #number [value]:number
70
+ | #symbol [value]:symbol
71
+ | #string [value]:string
72
+ ;
73
+
74
+ transform
75
+ program ->
76
+ #main pass(program$repeat_0) ;
77
+
78
+ program$repeat_0 ->
79
+ #main flatten(program.#program, item, program$repeat_0) ;
80
+
81
+ form ->
82
+ #list pass(list)
83
+ | #atom pass(atom) ;
84
+
85
+ list ->
86
+ #main list.#list(open, list$repeat_1, close) ;
87
+
88
+ list$repeat_1 ->
89
+ #main flatten(form.#elements, element, list$repeat_1) ;
90
+
91
+ atom ->
92
+ #number atom.#number(value)
93
+ | #symbol atom.#symbol(value)
94
+ | #string atom.#string(value)
95
+ ;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "parser-lr",
3
3
  "author": "Adam R Moss <adamrmoss@gmail.com>",
4
- "version": "0.4.1",
4
+ "version": "0.5.0",
5
5
  "description": "Shift-reduce parser library for EBNF grammars",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -22,16 +22,21 @@
22
22
  "exports": {
23
23
  ".": {
24
24
  "types": "./dist/lib/index.d.ts",
25
- "import": "./dist/lib/index.js"
25
+ "import": "./dist/lib/index.js",
26
+ "require": "./dist/lib-cjs/index.js",
27
+ "default": "./dist/lib/index.js"
26
28
  }
27
29
  },
28
30
  "bin": {
29
31
  "parser-lr": "bin/parser-lr.js"
30
32
  },
31
33
  "files": [
34
+ "README.md",
35
+ "LICENSE",
32
36
  "bin",
33
37
  "dist",
34
- "docs"
38
+ "docs",
39
+ "grammars"
35
40
  ],
36
41
  "publishConfig": {
37
42
  "access": "public",
@@ -41,7 +46,7 @@
41
46
  "bootstrap": "npm link && parser-lr table generate -g grammars/grammar.grammar -o src/lib/grammar/grammar.json -a lalr",
42
47
  "build": "npm run build:clean && npm run build:lib && npm run build:cli",
43
48
  "build:clean": "rm -rf dist && rm -f bin/parser-lr.js bin/parser-lr.js.map",
44
- "build:lib": "tsc -p tsconfig.lib.json && cp src/lib/grammar/grammar.json dist/lib/grammar/",
49
+ "build:lib": "node scripts/build-lib.mjs",
45
50
  "build:cli": "rollup -c rollup.cli.config.js && chmod +x bin/parser-lr.js",
46
51
  "cloc": "cloc src --exclude-dir=node_modules,dist",
47
52
  "test": "jest",