"use strict"; var GrammarError = require("../../grammar-error"), asts = require("../asts"), visitor = require("../visitor"); /* * Reports expressions that don't consume any input inside |*| or |+| in the * grammar, which prevents infinite loops in the generated parser. */ function reportInfiniteLoops(ast) { var check = visitor.build({ zero_or_more: function(node) { if (asts.matchesEmpty(ast, node.expression)) { throw new GrammarError("Infinite loop detected.", node.location); } }, one_or_more: function(node) { if (asts.matchesEmpty(ast, node.expression)) { throw new GrammarError("Infinite loop detected.", node.location); } } }); check(ast); } module.exports = reportInfiniteLoops;