Lexical analyzer JavaScript library. Similar to lex and flex.
- Jim R. Wilson (jimbojw)
This project is released under The MIT License.
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].