A streaming shift-reduce parser written in vanilla Javascript
var beefalo = require('beefalo')
, Fragment = require('Fragment')
, grass = require('grass')
, fs = require('fs')
, tokens
, grammar
// A token is any character 'a', 'b', or 'c'
tokens = new Fragment('a', 'a').union(new Fragment('b', 'b'))
.union(new Fragment('c', 'c'))
grammar = {
nonTerminals: ['S', 'A']
, terminals: ['a', 'b', 'c']
, rules: [
['S', ['A']]
, ['A', ['a', 'A']]
, ['A', ['b', 'A']]
, ['A', ['A', 'C']]
]
}
fs.createReadStream('input.txt')
.pipe(grass(tokens))
.pipe(beefalo(grammar))