/** * The MIT License (MIT) * Copyright (c) 2017-present Dmitry Soshnikov */ 'use strict'; /** * A regexp-tree plugin to replace `a+` to `aa*`, since NFA/DFA * handles Kleene-closure `a*`, and `a+` is just a syntactic sugar. */ module.exports = { Repetition: function Repetition(path) { var node = path.node, parent = path.parent; if (node.quantifier.kind !== '+') { return; } if (parent.type === 'Alternative') { path.getParent().insertChildAt(node.expression, path.index); } else { path.replace({ type: 'Alternative', expressions: [node.expression, node] }); } // Change quantifier. node.quantifier.kind = '*'; } };