/lexerjs

Primary LanguageJavaScript

Build Status

Lexerjs is simple lexical analyzer.

var tokens = lexer("5+5", [
  {
    name: "number",
    tester: function(tested) {
      var regResult = tested.match(/\d/);
      if (regResult && regResult[0] == tested) {
        return lexerResults.possible;
      } else {
        return lexerResults.none;
      }
    }
  },
  {
    name: "sign",
    tester: function(tested) {
      if (tested == "+") {
        return lexerResults.exact;
      } else {
        return lexerResults.none;
      }
    }
  }
]);

returns:

[
  { type: "number", value: "5" },
  { type: "sign", value: "+" },
  { type: "number", value: "5" }
]

It have only one function lexer what receive string and array of rules, and returns array of tokens.

Each rule must have name, what will be used as token type, and tester. Tester is a function what receive string what must be tested and return one of 'lexerResults'. lexerResults.none - if tested string doesn't fit to this rule. lexerResults.start - if token can start as tested string, but it must contains some more characters. lexerResults.exact - if tested string is exact a token and can't be expanded with extra character. lexerResults.possible - if tested string is a token and it can contain more character as well. lexerResults.skip - if tested string is a token but it should not be in the result list.

Lexer returns array of tokens, each token have a type, and a value what is a part of original string what fit to the rule.