Skip to content

Commit

Permalink
Merge pull request #1 from nolanlawson/246
Browse files Browse the repository at this point in the history
Fix this.lexer undefined, fixes zaach#246
  • Loading branch information
kether667 committed May 31, 2015
2 parents aeee03b + 7bcf8b7 commit 4e38b4d
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/jison.js
Original file line number Diff line number Diff line change
Expand Up @@ -1358,6 +1358,7 @@ lrGeneratorMixin.createParser = function createParser () {
}

// backwards compatability
p.lexer = this.lexer;
p.generate = bind('generate');
p.generateAngularModule = bind('generateAngularModule');
p.generateAMDModule = bind('generateAMDModule');
Expand Down
33 changes: 33 additions & 0 deletions tests/parser/generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ var Jison = require("../setup").Jison,
Lexer = require("../setup").Lexer,
assert = require("assert");

var fs = require('fs');
var path = require('path');

exports["test amd module generator"] = function() {
var lexData = {
rules: [
Expand Down Expand Up @@ -346,3 +349,33 @@ exports["test module include with each generator type"] = function () {
assert.ok(/TEST_VAR/.test(source), type + " supports module include");
});
};

// test for issue #246
exports["test compiling a parser/lexer"] = function () {
var grammar =
'// Simple "happy happy joy joy" parser, written by Nolan Lawson\n' +
'// Based on the song of the same name.\n\n' +
'%lex\n%%\n\n\\s+ /* skip whitespace */\n' +
'("happy") return \'happy\'\n' +
'("joy") return \'joy\'\n' +
'<<EOF>> return \'EOF\'\n\n' +
'/lex\n\n%start expressions\n\n' +
'%ebnf\n\n%%\n\n' +
'expressions\n : e EOF\n {return $1;}\n ;\n\n' +
'e\n : phrase+ \'joy\'? -> $1 + \' \' + yytext \n ;\n\n' +
'phrase\n : \'happy\' \'happy\' \'joy\' \'joy\' ' +
' -> [$1, $2, $3, $4].join(\' \'); \n ;';

var parser = new Jison.Parser(grammar);
var generated = parser.generate();

var tmpFile = path.resolve(__dirname, 'tmp-parser.js');
fs.writeFileSync(tmpFile, generated);
var parser2 = require('./tmp-parser');

assert.ok(parser.parse('happy happy joy joy joy') === 'happy happy joy joy joy',
'original parser works');
assert.ok(parser2.parse('happy happy joy joy joy') === 'happy happy joy joy joy',
'generated parser works');
fs.unlinkSync(tmpFile);
};

0 comments on commit 4e38b4d

Please sign in to comment.