yukigo-mini-parser 0.1.1 → 0.1.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/CHANGELOG.md +12 -0
- package/dist/src/grammar.d.ts +28 -0
- package/dist/src/grammar.js +100 -0
- package/dist/src/grammar.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.js +33 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lexer.d.ts +38 -0
- package/dist/src/lexer.js +46 -0
- package/dist/src/lexer.js.map +1 -0
- package/dist/src/parse.d.ts +1 -0
- package/dist/src/parse.js +16 -0
- package/dist/src/parse.js.map +1 -0
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -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;
|
|
@@ -0,0 +1,100 @@
|
|
|
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", "symbols": ["_", "statements", "_", (MiniLexer.has("EOF") ? { type: "EOF" } : EOF)], "postprocess": (d) => d[1].flat(Infinity) },
|
|
16
|
+
{ "name": "statements", "symbols": ["statement"], "postprocess": (d) => [d[0]] },
|
|
17
|
+
{ "name": "statements", "symbols": ["statements", "_", "statement"], "postprocess": (d) => [...d[0], d[2]] },
|
|
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", "symbols": [{ "literal": "{" }, "_", "body", "_", { "literal": "}" }], "postprocess": d => d[2] },
|
|
34
|
+
{ "name": "body", "symbols": ["statements"], "postprocess": (d) => new Sequence(d[0].flat(Infinity)) },
|
|
35
|
+
{ "name": "body", "symbols": [], "postprocess": () => new Sequence([]) },
|
|
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": ")" }, "_", "statement_list"] },
|
|
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, new UnguardedBody(d[3][6]))]);
|
|
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": "expression", "symbols": ["comparison"], "postprocess": (d) => d[0] },
|
|
60
|
+
{ "name": "comparison", "symbols": ["addition", "_", "comparison_operator", "_", "addition"], "postprocess": (d) => new ComparisonOperation(d[2], d[0], d[4]) },
|
|
61
|
+
{ "name": "comparison", "symbols": ["addition"], "postprocess": (d) => d[0] },
|
|
62
|
+
{ "name": "addition", "symbols": ["addition", "_", { "literal": "+" }, "_", "multiplication"], "postprocess": (d) => new ArithmeticBinaryOperation("Plus", d[0], d[4]) },
|
|
63
|
+
{ "name": "addition", "symbols": ["addition", "_", { "literal": "-" }, "_", "multiplication"], "postprocess": (d) => new ArithmeticBinaryOperation("Minus", d[0], d[4]) },
|
|
64
|
+
{ "name": "addition", "symbols": ["multiplication"], "postprocess": (d) => d[0] },
|
|
65
|
+
{ "name": "multiplication", "symbols": ["multiplication", "_", { "literal": "*" }, "_", "primary"], "postprocess": (d) => new ArithmeticBinaryOperation("Multiply", d[0], d[4]) },
|
|
66
|
+
{ "name": "multiplication", "symbols": ["multiplication", "_", { "literal": "/" }, "_", "primary"], "postprocess": (d) => new ArithmeticBinaryOperation("Divide", d[0], d[4]) },
|
|
67
|
+
{ "name": "multiplication", "symbols": ["primary"], "postprocess": (d) => d[0] },
|
|
68
|
+
{ "name": "primary", "symbols": [{ "literal": "(" }, "_", "expression", "_", { "literal": ")" }], "postprocess": (d) => d[2] },
|
|
69
|
+
{ "name": "primary", "symbols": ["primitive"], "postprocess": (d) => d[0] },
|
|
70
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("number") ? { type: "number" } : number)], "postprocess": (d) => new NumberPrimitive(Number(d[0].value)) },
|
|
71
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("char") ? { type: "char" } : char)], "postprocess": (d) => new CharPrimitive(d[0].value) },
|
|
72
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("string") ? { type: "string" } : string)], "postprocess": (d) => new StringPrimitive(d[0].value) },
|
|
73
|
+
{ "name": "primitive", "symbols": [(MiniLexer.has("bool") ? { type: "bool" } : bool)], "postprocess": (d) => new BooleanPrimitive(d[0].value) },
|
|
74
|
+
{ "name": "primitive", "symbols": ["variable"], "postprocess": (d) => d[0] },
|
|
75
|
+
{ "name": "primitive", "symbols": ["list_primitive"], "postprocess": d => d[0] },
|
|
76
|
+
{ "name": "type", "symbols": ["variable"], "postprocess": (d) => new SimpleType(d[0].value, []) },
|
|
77
|
+
{ "name": "type", "symbols": ["type", { "literal": "[" }, { "literal": "]" }], "postprocess": (d) => new ListType(d[0], []) },
|
|
78
|
+
{ "name": "list_primitive", "symbols": [{ "literal": "[" }, "_", "expression_list", "_", { "literal": "]" }], "postprocess": (d) => new ListPrimitive(d[2]) },
|
|
79
|
+
{ "name": "expression_list$ebnf$1", "symbols": [] },
|
|
80
|
+
{ "name": "expression_list$ebnf$1$subexpression$1", "symbols": [{ "literal": "," }, "_", "expression"] },
|
|
81
|
+
{ "name": "expression_list$ebnf$1", "symbols": ["expression_list$ebnf$1", "expression_list$ebnf$1$subexpression$1"], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
82
|
+
{ "name": "expression_list", "symbols": ["expression", "_", "expression_list$ebnf$1"], "postprocess": (d) => ([d[0], ...d[2].map(x => x[2])]) },
|
|
83
|
+
{ "name": "variable", "symbols": [(MiniLexer.has("variable") ? { type: "variable" } : variable)], "postprocess": (d) => new SymbolPrimitive(d[0].value) },
|
|
84
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("equal") ? { type: "equal" } : equal)], "postprocess": d => "Equal" },
|
|
85
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("notEqual") ? { type: "notEqual" } : notEqual)], "postprocess": d => "NotEqual" },
|
|
86
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("lt") ? { type: "lt" } : lt)], "postprocess": d => "LessThan" },
|
|
87
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("lte") ? { type: "lte" } : lte)], "postprocess": d => "LessOrEqualThan" },
|
|
88
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("gt") ? { type: "gt" } : gt)], "postprocess": d => "GreaterThan" },
|
|
89
|
+
{ "name": "comparison_operator", "symbols": [(MiniLexer.has("gte") ? { type: "gte" } : gte)], "postprocess": d => "GreaterOrEqualThan" },
|
|
90
|
+
{ "name": "_$ebnf$1", "symbols": [] },
|
|
91
|
+
{ "name": "_$ebnf$1", "symbols": ["_$ebnf$1", (MiniLexer.has("WS") ? { type: "WS" } : WS)], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
92
|
+
{ "name": "_", "symbols": ["_$ebnf$1"], "postprocess": d => null },
|
|
93
|
+
{ "name": "__$ebnf$1", "symbols": [(MiniLexer.has("WS") ? { type: "WS" } : WS)] },
|
|
94
|
+
{ "name": "__$ebnf$1", "symbols": ["__$ebnf$1", (MiniLexer.has("WS") ? { type: "WS" } : WS)], "postprocess": (d) => d[0].concat([d[1]]) },
|
|
95
|
+
{ "name": "__", "symbols": ["__$ebnf$1"], "postprocess": d => null }
|
|
96
|
+
],
|
|
97
|
+
ParserStart: "program",
|
|
98
|
+
};
|
|
99
|
+
export default grammar;
|
|
100
|
+
//# sourceMappingURL=grammar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../src/grammar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import nearley from "nearley";
|
|
2
|
+
import grammar from "./grammar.js";
|
|
3
|
+
class UnexpectedToken extends Error {
|
|
4
|
+
constructor(token) {
|
|
5
|
+
super(`Parser: Unexpected '${token.type}' token '${token.value}' at line ${token.line} col ${token.col}.`);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class YukigoMiniParser {
|
|
9
|
+
errors = [];
|
|
10
|
+
parse(code) {
|
|
11
|
+
return this.feedParser(code);
|
|
12
|
+
}
|
|
13
|
+
parseExpression(code) {
|
|
14
|
+
return this.feedParser(code);
|
|
15
|
+
}
|
|
16
|
+
feedParser(code) {
|
|
17
|
+
const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));
|
|
18
|
+
try {
|
|
19
|
+
parser.feed(code);
|
|
20
|
+
parser.finish();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if ("token" in error)
|
|
24
|
+
throw new UnexpectedToken(error.token);
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
const results = parser.results;
|
|
28
|
+
if (results.length > 1)
|
|
29
|
+
throw Error(`Ambiguous grammar. The parser generated ${results.length} ASTs`);
|
|
30
|
+
return results[0];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# 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;AAGnC,MAAM,eAAgB,SAAQ,KAAK;IACjC,YAAY,KAAY;QACtB,KAAK,CACH,uBAAuB,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,KAAK,aAAa,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,GAAG,GAAG,CACpG,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACpB,MAAM,GAAa,EAAE,CAAC;IAEtB,KAAK,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACM,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACO,UAAU,CAAC,IAAY;QAC7B,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,IAAI,OAAO,IAAI,KAAK;gBAAE,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAA;QACb,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YACpB,MAAM,KAAK,CACT,2CAA2C,OAAO,CAAC,MAAM,OAAO,CACjE,CAAC;QACJ,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -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;
|
|
@@ -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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yukigo-mini-parser",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "nearleyc src/grammar.ne -o src/grammar.ts && tsc",
|
|
@@ -27,9 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@types/moo": "^0.5.10",
|
|
30
|
-
"yukigo-ast": "^0.1.0",
|
|
31
30
|
"moo": "^0.5.2",
|
|
32
31
|
"moo-ignore": "^2.5.3",
|
|
33
32
|
"nearley": "^2.20.1"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"yukigo-ast": "^0.2.0"
|
|
34
36
|
}
|
|
35
37
|
}
|