@scinorandex/sparse 0.0.1 → 0.0.3
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.
- package/README.md +2 -2
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts +4 -1
- package/dist/generator.js +47 -32
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/meta/common.d.ts +57 -0
- package/dist/meta/common.js +62 -0
- package/dist/meta/common.js.map +1 -0
- package/dist/meta/handwritten.d.ts +12 -0
- package/dist/{grammarParser.js → meta/handwritten.js} +24 -24
- package/dist/meta/handwritten.js.map +1 -0
- package/dist/meta/selfhosted.d.ts +23 -0
- package/dist/meta/selfhosted.js +206 -0
- package/dist/meta/selfhosted.js.map +1 -0
- package/dist/meta/states.d.ts +1580 -0
- package/dist/meta/states.js +1493 -0
- package/dist/meta/states.js.map +1 -0
- package/dist/parser.d.ts +16 -5
- package/dist/parser.js +25 -7
- package/dist/parser.js.map +1 -1
- package/dist/{tableParser.d.ts → table/handwritten.d.ts} +1 -1
- package/dist/{tableParser.js → table/handwritten.js} +2 -2
- package/dist/table/handwritten.js.map +1 -0
- package/dist/table/selfhosted.d.ts +2 -0
- package/dist/table/selfhosted.js +65 -0
- package/dist/table/selfhosted.js.map +1 -0
- package/dist/table/states.d.ts +592 -0
- package/dist/table/states.js +593 -0
- package/dist/table/states.js.map +1 -0
- package/dist/utils/Result.d.ts +1 -1
- package/dist/utils/errorWindowBuilder.d.ts +1 -1
- package/example/LoLang/example.ts +14 -7
- package/example/complicated/grammar.txt +37 -0
- package/example/math/example.ts +1 -4
- package/example/selfhosted/01-meta-grammar.txt +10 -0
- package/example/selfhosted/02-table-grammar.txt +6 -0
- package/example/selfhosted/codegen-meta.ts +1489 -0
- package/example/selfhosted/codegen-table.ts +589 -0
- package/example/selfhosted/example.ts +39 -0
- package/package.json +4 -4
- package/src/cli.ts +1 -1
- package/src/generator.ts +52 -34
- package/src/index.ts +3 -2
- package/src/meta/common.ts +74 -0
- package/src/{grammarParser.ts → meta/handwritten.ts} +17 -21
- package/src/meta/selfhosted.ts +272 -0
- package/src/meta/states.ts +1489 -0
- package/src/parser.ts +53 -19
- package/src/{tableParser.ts → table/handwritten.ts} +5 -5
- package/src/table/selfhosted.ts +67 -0
- package/src/table/states.ts +589 -0
- package/src/utils/Result.ts +1 -1
- package/src/utils/errorWindowBuilder.ts +1 -1
- package/tsconfig.build.json +30 -0
- package/tsconfig.json +6 -6
- package/dist/grammarParser.d.ts +0 -27
- package/dist/grammarParser.js.map +0 -1
- package/dist/tableParser.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<S>: <PROGRAM>;
|
|
2
|
+
<PROGRAM>: (<FUNCTION_DEFINITION_LIST: functions>)? [EOF];
|
|
3
|
+
|
|
4
|
+
<FUNCTION_DEFINITION_LIST>: <FUNCTION_DEFINITION: function> (<FUNCTION_DEFINITION_LIST: rest>)?;
|
|
5
|
+
<FUNCTION_DEFINITION>: [FUNCTION] [IDENTIFIER] [LPAREN] (<PARAMETER_LIST: parameters>)? [RPAREN] [LBRACE] (<STATEMENT_LIST: statements>)? [RBRACE];
|
|
6
|
+
<PARAMETER_LIST>: [IDENTIFIER: parameter_name] ([COMMA] <PARAMETER_LIST: rest>)?;
|
|
7
|
+
|
|
8
|
+
<STATEMENT_LIST>: <STATEMENT: stmt> (<STATEMENT_LIST: rest>)?;
|
|
9
|
+
<BLOCK_STATEMENT>: [LBRACE] (<STATEMENT_LIST: stmt_list>) [RBRACE];
|
|
10
|
+
|
|
11
|
+
<STATEMENT>: <IF_STATEMENT | WHILE_LOOP | EXPRESSION_STATEMENT | BLOCK_STATEMENT | VARIABLE_DEFINITION: stmt>;
|
|
12
|
+
|
|
13
|
+
<VARIABLE_DEFINITION>: [VAR] [IDENTIFIER: identifier] [EQUALS] <EXPRESSION: expr> [SEMICOLON];
|
|
14
|
+
<IF_STATEMENT>: [IF] [LPAREN] (<EXPRESSION: condition>)? [RPAREN] <STATEMENT: stmt> ([ELSE] <STATEMENT: else_stmt>)?;
|
|
15
|
+
<WHILE_LOOP>: [WHILE] [IDENTIFIER: loop_name] [LPAREN] <EXPRESSION: condition> [RPAREN] <STATEMENT: stmt>;
|
|
16
|
+
<EXPRESSION_STATEMENT>: <EXPRESSION: expr> [SEMICOLON];
|
|
17
|
+
|
|
18
|
+
<EXPRESSION>: <ASSIGNMENT_EXPRESSION: expr>;
|
|
19
|
+
<ASSIGNMENT_EXPRESSION>: ([IDENTIFIER: identifier] [EQUALS])? <EQUALITY_EXPRESSION: expr>;
|
|
20
|
+
<EQUALITY_EXPRESSION>: <COMPARISON_EXPRESSION: left> ([DOUBLE_EQUALS | NOT_EQUALS: op] <COMPARISON_EXPRESSION: right>)?;
|
|
21
|
+
|
|
22
|
+
<COMPARISON_EXPRESSION>: <BITWISE_OR_EXPRESSION: left> ([LESS_THAN | GREATER_THAN | LESS_THAN_EQUALS | GREATER_THAN_EQUALS: op] <BITWISE_OR_EXPRESSION: right>)?;
|
|
23
|
+
<BITWISE_OR_EXPRESSION>: <BITWISE_AND_EXPRESSION: left> ([PIPE | TILDE_PIPE: op] <BITWISE_OR_EXPRESSION: right>)?;
|
|
24
|
+
<BITWISE_AND_EXPRESSION>: <BITWISE_XOR_EXPRESSION: left> ([AMPERSAND | TILDE_AMPERSAND: op] <BITWISE_AND_EXPRESSION: right>)?;
|
|
25
|
+
<BITWISE_XOR_EXPRESSION>: <TERM_EXPRESSION: left> ([CARAT | TILDE_CARAT: op] <BITWISE_XOR_EXPRESSION: right>)?;
|
|
26
|
+
|
|
27
|
+
<TERM_EXPRESSION>: <UNARY_EXPR: left> ([PLUS | MINUS: op] <TERM_EXPRESSION: right>)?;
|
|
28
|
+
<UNARY_EXPR>: ([LEFTSHIFT | RIGHTSHIFT | TILDE: op])? <ENDPOINT: expr>;
|
|
29
|
+
|
|
30
|
+
<GROUPING_EXPRESSION>: [LPAREN] <EXPRESSION: expr> [RPAREN];
|
|
31
|
+
<FUNCTION_CALL_EXPRESSION>: [IDENTIFIER: function_name] [LPAREN] (<ARGUMENT_LIST: arguments>)? [RPAREN];
|
|
32
|
+
<ARGUMENT_LIST>: <EXPRESSION: arg> ([COMMA] <ARGUMENT_LIST: rest>)?;
|
|
33
|
+
|
|
34
|
+
<ENDPOINT>: [IDENTIFIER: identifier];
|
|
35
|
+
<ENDPOINT>: [NUMBER: number];
|
|
36
|
+
<ENDPOINT>: <GROUPING_EXPRESSION: expr>;
|
|
37
|
+
<ENDPOINT>: <FUNCTION_CALL_EXPRESSION: expr>;
|
package/example/math/example.ts
CHANGED
|
@@ -39,10 +39,7 @@ async function main() {
|
|
|
39
39
|
const states = buildStates(await fs.readFile("./example/math/table.txt", "utf8"));
|
|
40
40
|
const parserGenerator = new Sparse<TokenType, Metadata, Node>({ productions, states, toStringifiedTokenType });
|
|
41
41
|
|
|
42
|
-
const parser = parserGenerator.generate(lexer, {
|
|
43
|
-
reducer: (input, productionIndex) => new Node(input),
|
|
44
|
-
});
|
|
45
|
-
|
|
42
|
+
const parser = parserGenerator.generate(lexer, { reducer: (_, { input }) => new Node(input) });
|
|
46
43
|
console.log(parser.parse().result!.toObject());
|
|
47
44
|
}
|
|
48
45
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<S>: <PROGRAM>;
|
|
2
|
+
<PROGRAM: program>: (<PRODUCTIONS: productions>)? [EOF];
|
|
3
|
+
<PRODUCTIONS: productions>: <PRODUCTION: production> (<PRODUCTIONS: rest>)?;
|
|
4
|
+
<PRODUCTION: production>: [L_ANGLE] [IDENTIFIER: production_name] ([COLON] [IDENTIFIER: uuid])? [R_ANGLE] [COLON] <TOKENS: tokens> [SEMICOLON];
|
|
5
|
+
<TOKENS: tokens>: <TOKEN: token> (<TOKENS: rest>)?;
|
|
6
|
+
<TOKEN: token>: <VARIABLE | TERMINAL: token>;
|
|
7
|
+
<TOKEN: grouped_token>: [L_PAREN] <TOKENS: tokens> [R_PAREN] [QUESTION_MARK: question_mark];
|
|
8
|
+
<VARIABLE: variable>: [L_ANGLE] <INSIDE: inside> ([COLON] [IDENTIFIER: token_name])? [R_ANGLE];
|
|
9
|
+
<TERMINAL: terminal>: [L_BRACKET] <INSIDE: inside> ([COLON] [IDENTIFIER: token_name])? [R_BRACKET];
|
|
10
|
+
<INSIDE: inside>: [IDENTIFIER: identifier] ([PIPE] <INSIDE: rest>)?;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<S>: <PROGRAM>;
|
|
2
|
+
<PROGRAM: program>: <STATES: states> [EOF];
|
|
3
|
+
<STATES: states>: <ITEMS: state> (<STATES: rest>)?;
|
|
4
|
+
<ITEMS: items>: <ITEM: item> ([COMMA] <ITEMS: rest>)?;
|
|
5
|
+
<ITEM: terminal>: [L_BRACKET] [IDENTIFIER: name] [R_BRACKET] [EQUALS] [IDENTIFIER: action];
|
|
6
|
+
<ITEM: variable>: [L_ANGLE] [IDENTIFIER: name] [R_ANGLE] [EQUALS] [NUMBER: state];
|