Newer
Older
parsetest / test.js
fs = require('fs');
lex = require('./lex.js');
parse = require('./parse.js');

function debugExpr(expr)
{
    const tokens = new lex.TokenStream(expr);
    //console.log(tokens.getPrettyTokenList());

    const parser = new parse.Parser(tokens);

    const result = parser.statements();

    if (result.error)
    {
        console.log("Error: " + result.error.msg + " on line " + result.error.line + " char " + result.error.pos);

        let relevent = expr.substring(Math.max(0, result.error.inputPos - 50), result.error.inputPos + 1).trim();
        const parts = relevent.split("\n");
        relevent = parts[parts.length - 1];
        console.log(relevent);
        console.log(" ".repeat(Math.max(0, relevent.length - 1)) + "^");
    }
    else
    {
        console.format(parse.getPrettyAST(result));
    }
}

debugExpr(fs.readFileSync(process.argv[2], "utf8"));