diff --git a/parse.js b/parse.js index 2f52e4f..1adb19b 100755 --- a/parse.js +++ b/parse.js @@ -350,7 +350,7 @@ function parseDefOp(tokens, linenum, charnum) { } tokens.pop(); - if (false) { + if (fst(tokens)[1] !== "Left" && fst(tokens)[1] !== "Right") { throw error.JSyntaxError(linenum, charnum, "defop must be followed by precedence and then either Left or Right"); @@ -368,7 +368,7 @@ function parseDefOp(tokens, linenum, charnum) { }))) { throw error.JSyntaxError(linenum, charnum, - "defop must be surrounded by exactly 3 identifier"); + "defop must be surrounded by exactly 3 identifiers"); } var pattern = tokens.slice(tokens.length-3, tokens.length); @@ -576,7 +576,7 @@ function parse(tokens) { } } -//var istr = fs.readFileSync('/dev/stdin').toString(); +var istr = fs.readFileSync('/dev/stdin').toString(); function parseFull(tokenized) { var ast = []; try { @@ -597,7 +597,7 @@ module.exports = { parse : function(str) { }; -//console.log(parseFull(tokenizer.tokenize(istr)).map(pprint.pprint).join("\n")); +console.log(parseFull(tokenizer.tokenize(istr)).map(pprint.pprint).join("\n")); //console.log(tokenizer.tokenize(istr)); //console.log(parseFull(tokenizer.tokenize(istr))); diff --git a/tokenize.js b/tokenize.js index 0db5e72..9397b47 100755 --- a/tokenize.js +++ b/tokenize.js @@ -347,17 +347,21 @@ function tokenizeHelp(input, matchop) { process.exit(1); } } +var defop_pattern = ["defop", "integer", "identifier", + "left_paren", "identifier", + "identifier", "identifier", "right_paren"]; function tokenizeFull(input) { var matchop = tools.opMatch(operators); var initialPass = tokenizeHelp(input, matchop).reverse(); for (var i = 0; i < initialPass.length; i++) { - if (initialPass.slice(i, i+7).map(tools.fst) === - ["defop", "integer", "identifier", "Left", "Right", - "left_paren", "identifier", "identifier", "identifier", - "right_paren"]) + if (initialPass.slice(i, i+8).map(tools.fst).every( + function(x, i) { + return x === defop_pattern[i]; + })) { rep.OPInfo[initialPass[i+5][1]] = [parseInt(initialPass[i+1][1], 10), initialPass[i+2][1]]; + } } operators = Object.keys(rep.OPInfo);