UNPKG

esther-medina-quintero-parser-nearley

Version:
63 lines (58 loc) 1.36 kB
'use strict'; const SPACE = require('./tokens.js'); const fs = require('fs'); const nearley = require("nearley"); const grammar = require("./grammar.js"); const { lexer } = require('./lex.js'); // Check parenthesis balance function parBalance(line) { let stack = 0; lexer.reset(line); let tokens = lexer.tokens; /// console.log(tokens); for (let token of tokens) { if (!token || token.type == "EOF") break; if (token.type == "LP") stack++; else if (token.type == "RP") stack--; } return stack; } function parse(p) { // debugger const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)); parser.feed(p); const ast = parser.results[0]; return ast; } function parseFromFile(origin) { // debugger const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)); const source = fs.readFileSync(origin, { encoding: 'utf8' }); parser.feed(source); const ast = parser.results[0]; return ast; } let getTokens = function(line) { debugger; lexer.reset(line); let result = [], t = null; do { try { t = lexer.next(); result.push(t); } catch (e) { console.error(e); result.push({ type: "ERROR", text: e.message}); break; } } while(t); return result; } module.exports = { lex: lexer, parse, SPACE, parseFromFile, parBalance, getTokens }