ee8c121676
Labeled expressions lead to more maintainable code and also will allow certain optimizations (we can ignore results of expressions not passed to the actions). This does not speed up the benchmark suite execution statistically significantly on V8. Detailed results (benchmark suite totals): --------------------------------- Test # Before After --------------------------------- 1 28.43 kB/s 28.46 kB/s 2 28.38 kB/s 28.56 kB/s 3 28.22 kB/s 28.58 kB/s 4 28.76 kB/s 28.55 kB/s 5 28.57 kB/s 28.48 kB/s --------------------------------- Average 28.47 kB/s 28.53 kB/s --------------------------------- Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.55 Safari/533.4
23 lines
530 B
JavaScript
23 lines
530 B
JavaScript
/*
|
|
* Classic example grammar, which recognizes simple arithmetic expressions like
|
|
* "2*(3+4)". The parser generated from this grammar then computes their value.
|
|
*/
|
|
|
|
start
|
|
= additive
|
|
|
|
additive
|
|
= left:multiplicative "+" right:additive { return left + right; }
|
|
/ multiplicative
|
|
|
|
multiplicative
|
|
= left:primary "*" right:multiplicative { return left * right; }
|
|
/ primary
|
|
|
|
primary
|
|
= integer
|
|
/ "(" additive:additive ")" { return additive; }
|
|
|
|
integer "integer"
|
|
= digits:[0-9]+ { return parseInt(digits.join(""), 10); }
|