@fink/larix
Version:
A parser for generating fink's AST.
64 lines (52 loc) • 1.11 kB
JavaScript
const {
init_parser,
start_parser
} = require("@fink/prattler/parser.js");
const {
tokenize
} = require("./lexer/tokens.js");
const {
init_language
} = require("./lang/init.js");
const {
parse_module
} = require("./lang/module/init.js");
const {
single_expression
} = require("./lang/block/expr.js");
const init_tokens = ctx => {
const tokens = tokenize(ctx.code);
return { ...ctx,
tokens
};
};
exports.init_tokens = init_tokens;
const init = ctx => {
let ˆpipe_result_1 = ctx;
ˆpipe_result_1 = init_tokens(ˆpipe_result_1);
ˆpipe_result_1 = init_parser(ˆpipe_result_1);
ˆpipe_result_1 = init_language(ˆpipe_result_1);
return ˆpipe_result_1 = start_parser(ˆpipe_result_1);
};
exports.init = init;
const parse_expr = (code, filename) => {
const ctx = init({
code,
filename
});
const [expr, {
errors
}] = single_expression(ctx, 0);
return { ...expr,
errors
};
};
exports.parse_expr = parse_expr;
const parse = (code, filename) => {
const ctx = init({
code,
filename
});
return parse_module(ctx);
};
exports.parse = parse;