Skip to content

jimbojw/jslex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jslex

Lexical analyzer JavaScript library. Similar to lex and flex.

Developed by

  • Jim R. Wilson (jimbojw)

GitHub repository

License

This project is released under The MIT License.

Usage

The best way to understand how to use jslex is via illustrative example.

First, create a lexer:

var lexer = new jslex( {
    "start": {
        "[0-9]+": function() {
            return parseInt(this.text, 10);
        },
        "[-+\n]": function() {
            return this.text;
        },
        "[ \t\r]": null,
        ".": function() {
            throw "Invalid character '" + this.text + "' (line:" + (1 + this.line) + ", column:" + this.column + ")";
        }
    }
} );

The above lexer has one state, called "start", which contains 4 patterns:

  • one for numbers,
  • one for plus, minus, or new lines,
  • one for uninteresting whitespace characters, and
  • one for anything else.

To use the lexer on an input string, you can use the lex() method:

function callback( token ) {
  // Do something with returned token
}

lexer.lex( "1 + 2", callback );

In the above example, the callback() function will be called three times:

  • first with the number 1,
  • then with the string "+", and
  • lastly with the number 2.

A very common use case for the lexer is to simply collect all the tokens in an input stream. For this, use the collect() function:

var tokens = lexer.collect( "1 + 2" );

After executing the above snippet, the tokens variable would have three elements: [1, "+", 2].

About

A lexical analyzer in JavaScript.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published