Skip to content

Instantly share code, notes, and snippets.

@mythmon
Created June 15, 2016 13:33

Revisions

  1. Mike Cooper created this gist Jun 15, 2016.
    26 changes: 26 additions & 0 deletions jexl-spike.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,26 @@
    import {elements as defaultGrammar} from 'jexl/lib/grammar.js';
    import defaultParser from 'jexl/lib/parser/Parser.js';
    import defaultEvaluator from 'jexl/lib/evaluator/Evaluator.js';
    import defaultLexer from 'jexl/lib/Lexer.js';

    export function customEval(
    expr,
    context={},
    {
    transforms={},
    grammar=defaultGrammar,
    parser=defaultParser,
    evaluator=defaultEvaluator,
    lexer=defaultLexer,
    }={}
    ) {
    const parserInst = new parser(grammar);
    const evaluatorInst = new evaluator(grammar, transforms, context);
    const lexerInst = new lexer(grammar);

    const tokens = lexerInst.tokenize(expr);
    parserInst.addTokens(tokens);
    const ast = parserInst.complete();
    console.log('ast =', JSON.stringify(ast, null, 2));
    return evaluatorInst.eval(ast);
    };