yukigo-mini-parser 0.1.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.
- package/.mocharc.json +8 -0
- package/CHANGELOG.md +5 -0
- package/dist/grammar.d.ts +28 -0
- package/dist/grammar.js +104 -0
- package/dist/grammar.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer.d.ts +38 -0
- package/dist/lexer.js +46 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parse.d.ts +1 -0
- package/dist/parse.js +16 -0
- package/dist/parse.js.map +1 -0
- package/package.json +35 -0
- package/src/grammar.ne +127 -0
- package/src/grammar.ts +167 -0
- package/src/index.ts +24 -0
- package/src/lexer.ts +49 -0
- package/src/parse.ts +18 -0
- package/tests/parser.spec.ts +158 -0
- package/tsconfig.json +17 -0
- package/tutorial.md +753 -0
package/.mocharc.json
ADDED
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
interface NearleyToken {
|
|
2
|
+
value: any;
|
|
3
|
+
[key: string]: any;
|
|
4
|
+
}
|
|
5
|
+
interface NearleyLexer {
|
|
6
|
+
reset: (chunk: string, info: any) => void;
|
|
7
|
+
next: () => NearleyToken | undefined;
|
|
8
|
+
save: () => any;
|
|
9
|
+
formatError: (token: never) => string;
|
|
10
|
+
has: (tokenType: string) => boolean;
|
|
11
|
+
}
|
|
12
|
+
interface NearleyRule {
|
|
13
|
+
name: string;
|
|
14
|
+
symbols: NearleySymbol[];
|
|
15
|
+
postprocess?: (d: any[], loc?: number, reject?: {}) => any;
|
|
16
|
+
}
|
|
17
|
+
type NearleySymbol = string | {
|
|
18
|
+
literal: any;
|
|
19
|
+
} | {
|
|
20
|
+
test: (token: any) => boolean;
|
|
21
|
+
};
|
|
22
|
+
interface Grammar {
|
|
23
|
+
Lexer: NearleyLexer | undefined;
|
|
24
|
+
ParserRules: NearleyRule[];
|
|
25
|
+
ParserStart: string;
|
|
26
|
+
}
|
|
27
|
+
declare const grammar: Grammar;
|
|
28
|
+
export default grammar;
|
package/dist/grammar.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Generated automatically by nearley, version 2.20.1
|
|
2
|
+
// http://github.com/Hardmath123/nearley
|
|
3
|
+
// Bypasses TS6133. Allow declared but unused functions.
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
function id(d) { return d[0]; }
|
|
6
|
+
import { MiniLexer } from "./lexer.js";
|
|
7
|
+
import { SimpleType, Assignment, Variable, ListPrimitive, ListType, ArithmeticBinaryOperation, SymbolPrimitive, NumberPrimitive, ComparisonOperation, BooleanPrimitive, StringPrimitive, ParameterizedType, Sequence, UnguardedBody, If, While, VariablePattern, Equation, Procedure, TypeSignature, CharPrimitive, NilPrimitive, Return } from "@yukigo/ast";
|
|
8
|
+
;
|
|
9
|
+
;
|
|
10
|
+
;
|
|
11
|
+
;
|
|
12
|
+
const grammar = {
|
|
13
|
+
Lexer: MiniLexer,
|
|
14
|
+
ParserRules: [
|
|
15
|
+
{ "name": "program$ebnf$1", "symbols": ["statement"] },
|
|
16
|
+
{ "name": "program$ebnf$1", "symbols": ["program$ebnf$1", "statement"], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
17
|
+
{ "name": "program", "symbols": ["program$ebnf$1", "_", (MiniLexer.has("EOF") ? { type: "EOF" } : EOF)], "postprocess": (d) => d[0].flat(Infinity) },
|
|
18
|
+
{ "name": "statement$subexpression$1", "symbols": ["assignment"] },
|
|
19
|
+
{ "name": "statement$subexpression$1", "symbols": ["variable_statement"] },
|
|
20
|
+
{ "name": "statement$subexpression$1", "symbols": ["function_statement"] },
|
|
21
|
+
{ "name": "statement$subexpression$1", "symbols": ["return_statement"] },
|
|
22
|
+
{ "name": "statement$subexpression$1", "symbols": ["if_statement"] },
|
|
23
|
+
{ "name": "statement$subexpression$1", "symbols": ["while_statement"] },
|
|
24
|
+
{ "name": "statement", "symbols": ["statement$subexpression$1", "_", { "literal": ";" }, "_"], "postprocess": (d) => d[0][0] },
|
|
25
|
+
{ "name": "variable_statement$ebnf$1$subexpression$1", "symbols": ["_", { "literal": ":=" }, "_", "expression"] },
|
|
26
|
+
{ "name": "variable_statement$ebnf$1", "symbols": ["variable_statement$ebnf$1$subexpression$1"], "postprocess": id },
|
|
27
|
+
{ "name": "variable_statement$ebnf$1", "symbols": [], "postprocess": () => null },
|
|
28
|
+
{ "name": "variable_statement", "symbols": ["type", "__", "variable", "variable_statement$ebnf$1"], "postprocess": (d) => new Variable(d[2], d[3] ? d[3][3] : new NilPrimitive(null), d[0]) },
|
|
29
|
+
{ "name": "return_statement", "symbols": [{ "literal": "return" }, "_", "expression"], "postprocess": (d) => new Return(d[2]) },
|
|
30
|
+
{ "name": "while_statement", "symbols": [{ "literal": "while" }, "_", "condition", "_", "statement_list"], "postprocess": d => new While(d[2], d[4]) },
|
|
31
|
+
{ "name": "if_statement", "symbols": [{ "literal": "if" }, "_", "condition", "_", "statement_list", "_", { "literal": "else" }, "_", "statement_list"], "postprocess": d => new If(d[2], d[4], d[8]) },
|
|
32
|
+
{ "name": "condition", "symbols": [{ "literal": "(" }, "_", "expression", "_", { "literal": ")" }], "postprocess": (d) => d[2] },
|
|
33
|
+
{ "name": "statement_list$ebnf$1", "symbols": [] },
|
|
34
|
+
{ "name": "statement_list$ebnf$1", "symbols": ["statement_list$ebnf$1", "statement"], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
35
|
+
{ "name": "statement_list", "symbols": [{ "literal": "{" }, "_", "statement_list$ebnf$1", "_", { "literal": "}" }], "postprocess": d => new Sequence(d[2]) },
|
|
36
|
+
{ "name": "assignment", "symbols": ["variable", "_", { "literal": ":=" }, "_", "expression"], "postprocess": (d) => new Assignment(d[0], d[4]) },
|
|
37
|
+
{ "name": "function_statement$subexpression$1$ebnf$1", "symbols": ["param_list"], "postprocess": id },
|
|
38
|
+
{ "name": "function_statement$subexpression$1$ebnf$1", "symbols": [], "postprocess": () => null },
|
|
39
|
+
{ "name": "function_statement$subexpression$1", "symbols": [{ "literal": "(" }, "_", "function_statement$subexpression$1$ebnf$1", "_", { "literal": ")" }, "_", { "literal": "{" }, "_", "body", "_", { "literal": "}" }] },
|
|
40
|
+
{ "name": "function_statement", "symbols": ["type", "__", "variable", "function_statement$subexpression$1"], "postprocess": (d) => {
|
|
41
|
+
const paramTypeList = [];
|
|
42
|
+
const patternList = [];
|
|
43
|
+
if (d[3][2]) {
|
|
44
|
+
for (const [paramType, paramPattern] of d[3][2]) {
|
|
45
|
+
paramTypeList.push(paramType);
|
|
46
|
+
patternList.push(paramPattern);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const signatureType = new ParameterizedType(paramTypeList, d[0], []);
|
|
50
|
+
const signature = new TypeSignature(d[2], signatureType);
|
|
51
|
+
const procedure = new Procedure(d[2], [new Equation(patternList, d[3][8])]);
|
|
52
|
+
return [signature, procedure];
|
|
53
|
+
} },
|
|
54
|
+
{ "name": "param_list$ebnf$1", "symbols": [] },
|
|
55
|
+
{ "name": "param_list$ebnf$1$subexpression$1", "symbols": ["_", { "literal": "," }, "_", "param"] },
|
|
56
|
+
{ "name": "param_list$ebnf$1", "symbols": ["param_list$ebnf$1", "param_list$ebnf$1$subexpression$1"], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
57
|
+
{ "name": "param_list", "symbols": ["param", "param_list$ebnf$1"], "postprocess": d => [d[0], ...d[1].map(x => x[3])] },
|
|
58
|
+
{ "name": "param", "symbols": ["type", "__", "variable"], "postprocess": d => [d[0], new VariablePattern(d[2])] },
|
|
59
|
+
{ "name": "body$ebnf$1", "symbols": [] },
|
|
60
|
+
{ "name": "body$ebnf$1", "symbols": ["body$ebnf$1", "statement"], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
61
|
+
{ "name": "body", "symbols": ["body$ebnf$1"], "postprocess": (d) => new UnguardedBody(new Sequence(d[0])) },
|
|
62
|
+
{ "name": "expression", "symbols": ["comparison"], "postprocess": (d) => d[0] },
|
|
63
|
+
{ "name": "comparison", "symbols": ["addition", "_", "comparison_operator", "_", "addition"], "postprocess": (d) => new ComparisonOperation(d[2], d[0], d[4]) },
|
|
64
|
+
{ "name": "comparison", "symbols": ["addition"], "postprocess": (d) => d[0] },
|
|
65
|
+
{ "name": "addition", "symbols": ["addition", "_", { "literal": "+" }, "_", "multiplication"], "postprocess": (d) => new ArithmeticBinaryOperation("Plus", d[0], d[4]) },
|
|
66
|
+
{ "name": "addition", "symbols": ["addition", "_", { "literal": "-" }, "_", "multiplication"], "postprocess": (d) => new ArithmeticBinaryOperation("Minus", d[0], d[4]) },
|
|
67
|
+
{ "name": "addition", "symbols": ["multiplication"], "postprocess": (d) => d[0] },
|
|
68
|
+
{ "name": "multiplication", "symbols": ["multiplication", "_", { "literal": "*" }, "_", "primary"], "postprocess": (d) => new ArithmeticBinaryOperation("Multiply", d[0], d[4]) },
|
|
69
|
+
{ "name": "multiplication", "symbols": ["multiplication", "_", { "literal": "/" }, "_", "primary"], "postprocess": (d) => new ArithmeticBinaryOperation("Divide", d[0], d[4]) },
|
|
70
|
+
{ "name": "multiplication", "symbols": ["primary"], "postprocess": (d) => d[0] },
|
|
71
|
+
{ "name": "primary", "symbols": ["variable"], "postprocess": (d) => d[0] },
|
|
72
|
+
{ "name": "primary", "symbols": [{ "literal": "(" }, "_", "expression", "_", { "literal": ")" }], "postprocess": (d) => d[2] },
|
|
73
|
+
{ "name": "primary", "symbols": ["primitive"], "postprocess": (d) => d[0] },
|
|
74
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("number") ? { type: "number" } : number)], "postprocess": (d) => new NumberPrimitive(Number(d[0].value)) },
|
|
75
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("char") ? { type: "char" } : char)], "postprocess": (d) => new CharPrimitive(d[0].value) },
|
|
76
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("string") ? { type: "string" } : string)], "postprocess": (d) => new StringPrimitive(d[0].value) },
|
|
77
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("bool") ? { type: "bool" } : bool)], "postprocess": (d) => new BooleanPrimitive(d[0].value) },
|
|
78
|
+
{ "name": "primitive", "symbols": ["variable"], "postprocess": (d) => d[0] },
|
|
79
|
+
{ "name": "primitive", "symbols": ["list_primitive"], "postprocess": d => d[0] },
|
|
80
|
+
{ "name": "type", "symbols": ["variable"], "postprocess": (d) => new SimpleType(d[0].value, []) },
|
|
81
|
+
{ "name": "type", "symbols": ["type", { "literal": "[" }, { "literal": "]" }], "postprocess": (d) => new ListType(d[0], []) },
|
|
82
|
+
{ "name": "list_primitive", "symbols": [{ "literal": "[" }, "_", "expression_list", "_", { "literal": "]" }], "postprocess": (d) => new ListPrimitive(d[2]) },
|
|
83
|
+
{ "name": "expression_list$ebnf$1", "symbols": [] },
|
|
84
|
+
{ "name": "expression_list$ebnf$1$subexpression$1", "symbols": [{ "literal": "," }, "_", "expression", "_"] },
|
|
85
|
+
{ "name": "expression_list$ebnf$1", "symbols": ["expression_list$ebnf$1", "expression_list$ebnf$1$subexpression$1"], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
86
|
+
{ "name": "expression_list", "symbols": ["expression", "_", "expression_list$ebnf$1"], "postprocess": (d) => ([d[0], ...d[2].map(x => x[2])]) },
|
|
87
|
+
{ "name": "variable", "symbols": [(MiniLexer.has("variable") ? { type: "variable" } : variable)], "postprocess": (d) => new SymbolPrimitive(d[0].value) },
|
|
88
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("equal") ? { type: "equal" } : equal)], "postprocess": d => "Equal" },
|
|
89
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("notEqual") ? { type: "notEqual" } : notEqual)], "postprocess": d => "NotEqual" },
|
|
90
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("lt") ? { type: "lt" } : lt)], "postprocess": d => "LessThan" },
|
|
91
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("lte") ? { type: "lte" } : lte)], "postprocess": d => "LessOrEqualThan" },
|
|
92
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("gt") ? { type: "gt" } : gt)], "postprocess": d => "GreaterThan" },
|
|
93
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("gte") ? { type: "gte" } : gte)], "postprocess": d => "GreaterOrEqualThan" },
|
|
94
|
+
{ "name": "_$ebnf$1", "symbols": [] },
|
|
95
|
+
{ "name": "_$ebnf$1", "symbols": ["_$ebnf$1", (MiniLexer.has("WS") ? { type: "WS" } : WS)], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
96
|
+
{ "name": "_", "symbols": ["_$ebnf$1"], "postprocess": d => null },
|
|
97
|
+
{ "name": "__$ebnf$1", "symbols": [(MiniLexer.has("WS") ? { type: "WS" } : WS)] },
|
|
98
|
+
{ "name": "__$ebnf$1", "symbols": ["__$ebnf$1", (MiniLexer.has("WS") ? { type: "WS" } : WS)], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
99
|
+
{ "name": "__", "symbols": ["__$ebnf$1"], "postprocess": d => null }
|
|
100
|
+
],
|
|
101
|
+
ParserStart: "program",
|
|
102
|
+
};
|
|
103
|
+
export default grammar;
|
|
104
|
+
//# sourceMappingURL=grammar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../src/grammar.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import nearley from "nearley";
|
|
2
|
+
import grammar from "./grammar.js";
|
|
3
|
+
export class YukigoMiniParser {
|
|
4
|
+
errors = [];
|
|
5
|
+
parse(code) {
|
|
6
|
+
const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));
|
|
7
|
+
try {
|
|
8
|
+
parser.feed(code);
|
|
9
|
+
parser.finish();
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
const token = error.token;
|
|
13
|
+
const message = `Unexpected '${token.type}' token '${token.value}' at line ${token.line} col ${token.col}.`;
|
|
14
|
+
this.errors.push(message);
|
|
15
|
+
}
|
|
16
|
+
const results = parser.results;
|
|
17
|
+
if (results.length > 1)
|
|
18
|
+
throw Error(`Ambiguous grammar. The parser generated ${results.length} ASTs`);
|
|
19
|
+
return results[0];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,OAAO,gBAAgB;IACpB,MAAM,GAAa,EAAE,CAAC;IAEtB,KAAK,CAAC,IAAY;QACvB,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,MAAM,OAAO,GAAG,eAAe,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,KAAK,aAAa,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,GAAG,GAAG,CAAC;YAC5G,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC3B,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC9B,IAAG,OAAO,CAAC,MAAM,GAAG,CAAC;YACnB,MAAM,KAAK,CAAC,2CAA2C,OAAO,CAAC,MAAM,OAAO,CAAC,CAAA;QAE/E,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;CACF"}
|
package/dist/lexer.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import moo from "moo";
|
|
2
|
+
export declare const MiniLexerConfig: {
|
|
3
|
+
EOF: string;
|
|
4
|
+
wildcard: string;
|
|
5
|
+
WS: RegExp;
|
|
6
|
+
comment: RegExp;
|
|
7
|
+
number: RegExp;
|
|
8
|
+
char: RegExp;
|
|
9
|
+
string: RegExp;
|
|
10
|
+
bool: {
|
|
11
|
+
match: string[];
|
|
12
|
+
};
|
|
13
|
+
semicolon: string;
|
|
14
|
+
assign: string;
|
|
15
|
+
notEqual: string;
|
|
16
|
+
equal: string;
|
|
17
|
+
gte: string;
|
|
18
|
+
gt: string;
|
|
19
|
+
lte: string;
|
|
20
|
+
lt: string;
|
|
21
|
+
lparen: string;
|
|
22
|
+
rparen: string;
|
|
23
|
+
lsquare: string;
|
|
24
|
+
rsquare: string;
|
|
25
|
+
lbracket: string;
|
|
26
|
+
rbracket: string;
|
|
27
|
+
comma: string;
|
|
28
|
+
operator: RegExp;
|
|
29
|
+
variable: {
|
|
30
|
+
match: RegExp;
|
|
31
|
+
type: moo.TypeMapper;
|
|
32
|
+
};
|
|
33
|
+
NL: {
|
|
34
|
+
match: RegExp;
|
|
35
|
+
lineBreaks: boolean;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export declare const MiniLexer: any;
|
package/dist/lexer.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import moo from "moo";
|
|
2
|
+
import { makeLexer } from "moo-ignore";
|
|
3
|
+
const keywords = [
|
|
4
|
+
"return",
|
|
5
|
+
"if",
|
|
6
|
+
"else"
|
|
7
|
+
];
|
|
8
|
+
export const MiniLexerConfig = {
|
|
9
|
+
EOF: "*__EOF__*",
|
|
10
|
+
wildcard: "_",
|
|
11
|
+
WS: /[ \t]+/,
|
|
12
|
+
comment: /--.*?$|{-[\s\S]*?-}/,
|
|
13
|
+
number: /0[xX][0-9a-fA-F]+|0[bB][01]+|0[oO][0-7]+|(?:\d*\.\d+|\d+)(?:[eE][+-]?\d+)?/,
|
|
14
|
+
char: /'(?:\\['\\bfnrtv0]|\\u[0-9a-fA-F]{4}|[^'\\\n\r])?'/,
|
|
15
|
+
string: /"(?:\\["\\bfnrtv0]|\\u[0-9a-fA-F]{4}|[^"\\\n\r])*"/,
|
|
16
|
+
bool: {
|
|
17
|
+
match: ["True", "False"],
|
|
18
|
+
},
|
|
19
|
+
semicolon: ";",
|
|
20
|
+
assign: ":=",
|
|
21
|
+
notEqual: "!=",
|
|
22
|
+
equal: "==",
|
|
23
|
+
gte: ">=",
|
|
24
|
+
gt: ">",
|
|
25
|
+
lte: "<=",
|
|
26
|
+
lt: "<",
|
|
27
|
+
lparen: "(",
|
|
28
|
+
rparen: ")",
|
|
29
|
+
lsquare: "[",
|
|
30
|
+
rsquare: "]",
|
|
31
|
+
lbracket: "{",
|
|
32
|
+
rbracket: "}",
|
|
33
|
+
comma: ",",
|
|
34
|
+
operator: /\+|\*/,
|
|
35
|
+
variable: {
|
|
36
|
+
match: /[a-z_][a-zA-Z0-9_']*/,
|
|
37
|
+
type: moo.keywords({
|
|
38
|
+
keyword: keywords,
|
|
39
|
+
}),
|
|
40
|
+
},
|
|
41
|
+
NL: { match: /\r?\n/, lineBreaks: true },
|
|
42
|
+
};
|
|
43
|
+
export const MiniLexer = makeLexer(MiniLexerConfig, ["NL", "comment"], {
|
|
44
|
+
eof: true,
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=lexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,QAAQ,GAAG;IACf,QAAQ;IACR,IAAI;IACJ,MAAM;CACP,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,WAAW;IAChB,QAAQ,EAAE,GAAG;IACb,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE,qBAAqB;IAC9B,MAAM,EACJ,4EAA4E;IAC9E,IAAI,EAAE,oDAAoD;IAC1D,MAAM,EAAE,oDAAoD;IAC5D,IAAI,EAAE;QACJ,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;KACzB;IACD,SAAS,EAAE,GAAG;IACd,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,IAAI;IACT,EAAE,EAAE,GAAG;IACP,GAAG,EAAE,IAAI;IACT,EAAE,EAAE,GAAG;IACP,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE;QACR,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC;YACjB,OAAO,EAAE,QAAQ;SAClB,CAAC;KACH;IACD,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE;CACzC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;IACrE,GAAG,EAAE,IAAI;CACV,CAAC,CAAC"}
|
package/dist/parse.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/parse.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { YukigoMiniParser } from "./index.js";
|
|
2
|
+
const parser = new YukigoMiniParser();
|
|
3
|
+
const code = `int n
|
|
4
|
+
int result
|
|
5
|
+
|
|
6
|
+
n := 5
|
|
7
|
+
result := 1
|
|
8
|
+
|
|
9
|
+
while n > 0 do
|
|
10
|
+
result := result * n
|
|
11
|
+
n := n - 1
|
|
12
|
+
endwhile
|
|
13
|
+
|
|
14
|
+
print result # This should print 120`;
|
|
15
|
+
console.log(parser.parse(code));
|
|
16
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAA;AAErC,MAAM,IAAI,GAAG;;;;;;;;;;;qCAWwB,CAAA;AAErC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "yukigo-mini-parser",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "nearleyc src/grammar.ne -o src/grammar.ts && tsc",
|
|
7
|
+
"test": "mocha --import=tsx"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": "./dist/index.js",
|
|
14
|
+
"./package.json": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [],
|
|
17
|
+
"author": "",
|
|
18
|
+
"license": "ISC",
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/chai": "^5.2.2",
|
|
21
|
+
"@types/mocha": "^10.0.10",
|
|
22
|
+
"@types/node": "^24.7.0",
|
|
23
|
+
"chai": "^6.2.0",
|
|
24
|
+
"mocha": "^11.7.4",
|
|
25
|
+
"ts-node": "^10.9.2",
|
|
26
|
+
"typescript": "^5.9.2"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@types/moo": "^0.5.10",
|
|
30
|
+
"yukigo-ast": "^0.1.0",
|
|
31
|
+
"moo": "^0.5.2",
|
|
32
|
+
"moo-ignore": "^2.5.3",
|
|
33
|
+
"nearley": "^2.20.1"
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/grammar.ne
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
@{%
|
|
2
|
+
import { MiniLexer } from "./lexer.js"
|
|
3
|
+
import {
|
|
4
|
+
SimpleType,
|
|
5
|
+
Assignment,
|
|
6
|
+
Variable,
|
|
7
|
+
ListPrimitive,
|
|
8
|
+
ListType,
|
|
9
|
+
ArithmeticBinaryOperation,
|
|
10
|
+
SymbolPrimitive,
|
|
11
|
+
NumberPrimitive,
|
|
12
|
+
ComparisonOperation,
|
|
13
|
+
BooleanPrimitive,
|
|
14
|
+
StringPrimitive,
|
|
15
|
+
ParameterizedType,
|
|
16
|
+
Sequence,
|
|
17
|
+
UnguardedBody,
|
|
18
|
+
If,
|
|
19
|
+
While,
|
|
20
|
+
VariablePattern,
|
|
21
|
+
Equation,
|
|
22
|
+
Procedure,
|
|
23
|
+
TypeSignature,
|
|
24
|
+
CharPrimitive,
|
|
25
|
+
NilPrimitive,
|
|
26
|
+
Return
|
|
27
|
+
} from "yukigo-ast"
|
|
28
|
+
%}
|
|
29
|
+
|
|
30
|
+
@preprocessor typescript
|
|
31
|
+
@lexer MiniLexer
|
|
32
|
+
|
|
33
|
+
program -> statement:+ _ %EOF {% (d) => d[0].flat(Infinity) %}
|
|
34
|
+
|
|
35
|
+
# Statements
|
|
36
|
+
|
|
37
|
+
statement -> (assignment | variable_statement | function_statement | return_statement | if_statement | while_statement) _ ";" _ {% (d) => d[0][0] %}
|
|
38
|
+
|
|
39
|
+
variable_statement -> type __ variable (_ ":=" _ expression):? {% (d) => new Variable(d[2], d[3] ? d[3][3] : new NilPrimitive(null), d[0]) %}
|
|
40
|
+
|
|
41
|
+
return_statement -> "return" _ expression {% (d) => new Return(d[2]) %}
|
|
42
|
+
|
|
43
|
+
while_statement -> "while" _ condition _ statement_list {% d => new While(d[2], d[4]) %}
|
|
44
|
+
|
|
45
|
+
if_statement -> "if" _ condition _ statement_list _ "else" _ statement_list {% d => new If(d[2], d[4], d[8]) %}
|
|
46
|
+
|
|
47
|
+
condition -> "(" _ expression _ ")" {% (d) => d[2] %}
|
|
48
|
+
|
|
49
|
+
statement_list -> "{" _ statement:* _ "}" {% d => new Sequence(d[2]) %}
|
|
50
|
+
|
|
51
|
+
assignment -> variable _ ":=" _ expression {% (d) => new Assignment(d[0], d[4]) %}
|
|
52
|
+
|
|
53
|
+
## Function rules
|
|
54
|
+
|
|
55
|
+
function_statement -> type __ variable ("(" _ param_list:? _ ")" _ "{" _ body _ "}") {% (d) => {
|
|
56
|
+
const paramTypeList = []
|
|
57
|
+
const patternList = []
|
|
58
|
+
if(d[3][2]) {
|
|
59
|
+
for(const [paramType, paramPattern] of d[3][2]) {
|
|
60
|
+
paramTypeList.push(paramType);
|
|
61
|
+
patternList.push(paramPattern);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const signatureType = new ParameterizedType(paramTypeList, d[0], [])
|
|
65
|
+
|
|
66
|
+
const signature = new TypeSignature(d[2], signatureType);
|
|
67
|
+
const procedure = new Procedure(d[2], [new Equation(patternList, d[3][8])])
|
|
68
|
+
return [signature, procedure]
|
|
69
|
+
}%}
|
|
70
|
+
|
|
71
|
+
param_list -> param (_ "," _ param):* {% d => [d[0], ...d[1].map(x => x[3])] %}
|
|
72
|
+
|
|
73
|
+
param -> type __ variable {% d => [d[0], new VariablePattern(d[2])] %}
|
|
74
|
+
|
|
75
|
+
body -> statement:* {% (d) => new UnguardedBody(new Sequence(d[0])) %}
|
|
76
|
+
|
|
77
|
+
# Expressions
|
|
78
|
+
|
|
79
|
+
expression -> comparison {% (d) => d[0] %}
|
|
80
|
+
|
|
81
|
+
comparison ->
|
|
82
|
+
addition _ comparison_operator _ addition {% (d) => new ComparisonOperation(d[2], d[0], d[4]) %}
|
|
83
|
+
| addition {% (d) => d[0] %}
|
|
84
|
+
|
|
85
|
+
addition ->
|
|
86
|
+
addition _ "+" _ multiplication {% (d) => new ArithmeticBinaryOperation("Plus", d[0], d[4]) %}
|
|
87
|
+
| addition _ "-" _ multiplication {% (d) => new ArithmeticBinaryOperation("Minus", d[0], d[4]) %}
|
|
88
|
+
| multiplication {% (d) => d[0] %}
|
|
89
|
+
|
|
90
|
+
multiplication ->
|
|
91
|
+
multiplication _ "*" _ primary {% (d) => new ArithmeticBinaryOperation("Multiply", d[0], d[4]) %}
|
|
92
|
+
| multiplication _ "/" _ primary {% (d) => new ArithmeticBinaryOperation("Divide", d[0], d[4]) %}
|
|
93
|
+
| primary {% (d) => d[0] %}
|
|
94
|
+
|
|
95
|
+
primary ->
|
|
96
|
+
variable {% (d) => d[0] %}
|
|
97
|
+
| "(" _ expression _ ")" {% (d) => d[2] %}
|
|
98
|
+
| primitive {% (d) => d[0] %}
|
|
99
|
+
|
|
100
|
+
primitive ->
|
|
101
|
+
%number {% (d) => new NumberPrimitive(Number(d[0].value)) %}
|
|
102
|
+
| %char {% (d) => new CharPrimitive(d[0].value) %}
|
|
103
|
+
| %string {% (d) => new StringPrimitive(d[0].value) %}
|
|
104
|
+
| %bool {% (d) => new BooleanPrimitive(d[0].value) %}
|
|
105
|
+
| variable {% (d) => d[0] %}
|
|
106
|
+
| list_primitive {% d => d[0] %}
|
|
107
|
+
|
|
108
|
+
type ->
|
|
109
|
+
variable {% (d) => new SimpleType(d[0].value, []) %}
|
|
110
|
+
| type "[" "]" {% (d) => new ListType(d[0], []) %}
|
|
111
|
+
|
|
112
|
+
list_primitive -> "[" _ expression_list _ "]" {% (d) => new ListPrimitive(d[2]) %}
|
|
113
|
+
|
|
114
|
+
expression_list -> expression _ ("," _ expression _):* {% (d) => ([d[0], ...d[2].map(x => x[2])]) %}
|
|
115
|
+
|
|
116
|
+
variable -> %variable {% (d) => new SymbolPrimitive(d[0].value) %}
|
|
117
|
+
|
|
118
|
+
comparison_operator ->
|
|
119
|
+
%equal {% d => "Equal" %}
|
|
120
|
+
| %notEqual {% d => "NotEqual" %}
|
|
121
|
+
| %lt {% d => "LessThan" %}
|
|
122
|
+
| %lte {% d => "LessOrEqualThan" %}
|
|
123
|
+
| %gt {% d => "GreaterThan" %}
|
|
124
|
+
| %gte {% d => "GreaterOrEqualThan" %}
|
|
125
|
+
|
|
126
|
+
_ -> %WS:* {% d => null %}
|
|
127
|
+
__ -> %WS:+ {% d => null %}
|