Skip to content

Commit

Permalink
refactoring of match
Browse files Browse the repository at this point in the history
  • Loading branch information
lahmatiy committed May 15, 2018
1 parent 2d93d3f commit 7156be1
Showing 1 changed file with 12 additions and 18 deletions.
30 changes: 12 additions & 18 deletions lib/lexer/match.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,21 +59,18 @@ function internalMatch(tokens, syntax, syntaxes) {

function addTokenToStack() {
var matchToken = token;
var matchTokenCursor = tokenCursor;

moveToNextToken();

matchStack = {
type: 'Token',
size: matchStack.size + 1,
syntax: syntaxNode,
token: matchToken,
tokenCursor: matchTokenCursor,
prev: matchStack
};

if (matchStack.size > bestMatch.size) {
bestMatch = matchStack;
if (tokenCursor > longestMatch) {
longestMatch = tokenCursor;
}

return matchToken;
Expand All @@ -88,10 +85,8 @@ function internalMatch(tokens, syntax, syntaxes) {

matchStack = {
type: 'Open',
size: matchStack.size,
syntax: syntaxNode,
token: matchStack.token,
tokenCursor: matchStack.tokenCursor,
prev: matchStack
};
}
Expand All @@ -103,19 +98,17 @@ function internalMatch(tokens, syntax, syntaxes) {
} else {
matchStack = {
type: 'Close',
size: matchStack.size,
syntax: syntaxStack.syntax,
token: matchStack.token,
tokenCursor: matchStack.tokenCursor,
prev: matchStack
};
}

syntaxStack = syntaxStack.prev;
}

var matchStack = { type: 'Stub', size: 0, syntax: null, token: null, tokenCursor: -1, prev: null };
var bestMatch = matchStack;
var matchStack = { type: 'Stub', syntax: null, token: null, tokenCursor: -1, prev: null };
var longestMatch = 0;
var tokenCursor = -1;
var token = moveToNextToken();

Expand All @@ -124,7 +117,7 @@ function internalMatch(tokens, syntax, syntaxes) {
var elseStack = null;
var syntaxNode = syntax;

var LIMIT = 20000;
var LIMIT = 5000;
var iterationCount = 0;
// var x = syntaxNode;

Expand Down Expand Up @@ -184,7 +177,7 @@ function internalMatch(tokens, syntax, syntaxes) {
}

// close syntax if needed
if (syntaxStack !== null && thenStack.syntaxStack !== syntaxStack) {
while (syntaxStack !== null && thenStack.syntaxStack !== syntaxStack) {
closeSyntax();
}

Expand All @@ -206,8 +199,8 @@ function internalMatch(tokens, syntax, syntaxes) {
thenStack = elseStack.thenStack;
syntaxStack = elseStack.syntaxStack;
matchStack = elseStack.matchStack;
tokenCursor = matchStack.size === 0 ? -1 : matchStack.tokenCursor;
token = moveToNextToken();
tokenCursor = elseStack.tokenCursor;
token = elseStack.token;

// pop stack
elseStack = elseStack.prev;
Expand All @@ -223,6 +216,8 @@ function internalMatch(tokens, syntax, syntaxes) {
matchStack: matchStack,
syntaxStack: syntaxStack,
thenStack: thenStack,
tokenCursor: tokenCursor,
token: token,
prev: elseStack
};
}
Expand Down Expand Up @@ -353,7 +348,7 @@ function internalMatch(tokens, syntax, syntaxes) {
totalIterationCount += iterationCount;

if (syntaxNode === MATCH) {
while (syntaxStack) {
while (syntaxStack !== null) {
closeSyntax();
}

Expand All @@ -364,8 +359,7 @@ function internalMatch(tokens, syntax, syntaxes) {
error: null
};
} else {
tokenCursor = bestMatch.tokenCursor;
moveToNextToken();
token = tokens[longestMatch >= tokens.length ? tokens.length - 1 : longestMatch];

for (var value = '', offset = 0, i = 0; i < tokens.length; i++) {
var testToken = tokens[i];
Expand Down

0 comments on commit 7156be1

Please sign in to comment.