Commit graph

27 commits

Author SHA1 Message Date
David Majda af1968054b Implement semantic predicates 2010-06-08 14:49:13 +02:00
David Majda 4895f4f8e4 Treat the whole grammar as an AST node 2010-06-08 12:46:16 +02:00
David Majda 917cf1cf2a Start rule of the grammar is now implicitly its first rule
Before this change, the start rule was the one named "start" and there
was an option to override that. This is now impossible.

The goal of this change is to contain all information for the parser
generation in the grammar itself.

In the future, some override directive for the start rule (like Bison's
"%start") may be added to the grammar.
2010-06-08 11:03:28 +02:00
David Majda 66de889f4b Implement initializers 2010-06-08 09:15:09 +02:00
David Majda 718bcf5f87 Rename the |action| property of action AST nodes to |code| 2010-06-07 16:47:17 +02:00
David Majda 95735f2c97 Allow trailing semicolon (";") for rules 2010-06-07 10:59:14 +02:00
David Majda ee8c121676 Use labeled expressions and variables instead of $1, $2, etc.
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
2010-06-07 09:23:04 +02:00
David Majda 52704593cd Allow labeled expressions in the metagrammar (without any meaning yet) 2010-05-31 16:35:03 +02:00
David Majda 409ddf2ae8 Formatted all grammars more consistently and transparently
This is purely cosmetical change, no functionality was affected
(hopefully).
2010-05-31 16:35:03 +02:00
David Majda 698564a3c2 Replace ":" after a rule name with "="
I'll introduce labelled expressions shortly and I want to use ":" as a
label-expression separator. This change avoids conflict between the two
meanings of ":". (What would e.g. "foo: 'bar'" mean?  Rule "foo"
matching string "bar", or string "bar" labelled "foo"?)
2010-05-31 16:31:45 +02:00
David Majda 7fdf0492c7 Fixed error message for invalid character range + added test 2010-05-31 16:30:02 +02:00
David Majda 570658756a Remove useless action from the metagrammar 2010-05-31 12:48:43 +02:00
David Majda 33a1a7c1e9 Clean up class handling in the metagrammar and compiler
The class AST node now contains structured data and a raw text which is
used for error messages.
2010-05-22 10:55:12 +02:00
David Majda 137a4b4f53 Renamed |characters| -> |chars| (shorter, no loss of expressivity) 2010-05-21 21:18:33 +02:00
David Majda b4bf49443a AST refactoring 5/6: Make AST classless 2010-05-21 18:54:52 +02:00
David Majda 4e99a2bda7 AST refactoring 1/6: Make properties of AST nodes public
Removed undescore prefix of the properties and deleted getters.
2010-05-21 16:21:04 +02:00
David Majda b2f230fad2 Added Optional AST node.
This does not speed up the benchmark suite execution statistically significantly
on V8.

Detailed results (benchmark suite totals):

---------------------------------
 Test #     Before       After
---------------------------------
      1   28.84 kB/s   28.75 kB/s
      2   28.76 kB/s   28.69 kB/s
      3   28.72 kB/s   28.69 kB/s
      4   28.84 kB/s   28.93 kB/s
      5   28.82 kB/s   28.70 kB/s
---------------------------------
Average   28.80 kB/s   28.75 kB/s
---------------------------------

Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko)
Chrome/5.0.342.9 Safari/533.2
2010-04-21 21:19:48 +02:00
David Majda e5df8284b5 Added AndPredicate AST node.
This does not speed up the benchmark suite execution statistically significantly
on V8.

Detailed results (benchmark suite totals):

---------------------------------
 Test #     Before       After
---------------------------------
      1   28.72 kB/s   28.84 kB/s
      2   28.84 kB/s   28.76 kB/s
      3   28.83 kB/s   28.72 kB/s
      4   28.81 kB/s   28.84 kB/s
      5   28.76 kB/s   28.82 kB/s
---------------------------------
Average   28.79 kB/s   28.80 kB/s
---------------------------------

Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
2010-04-21 12:02:45 +02:00
David Majda c3c1c79665 Added OneOrMore AST node.
This speeds up the benchmark suite execution by 1.08% on V8.

Detailed results (benchmark suite totals):

---------------------------------
 Test #     Before       After
---------------------------------
      1   28.38 kB/s   28.72 kB/s
      2   28.52 kB/s   28.84 kB/s
      3   28.41 kB/s   28.83 kB/s
      4   28.47 kB/s   28.81 kB/s
      5   28.64 kB/s   28.76 kB/s
---------------------------------
Average   28.48 kB/s   28.79 kB/s
---------------------------------

Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
2010-04-20 21:09:23 +02:00
David Majda 7fc491412d Work around the fact that IE does not recognize "\v" in strings. 2010-04-14 21:29:05 +02:00
David Majda e63f64a3d5 Make the generated parsers standalone (no runtime is required).
This and also speeds up the benchmark suite execution by 7.83 % on V8.

Detailed results (benchmark suite totals):

---------------------------------
 Test #     Before       After
---------------------------------
      1   26.17 kB/s   28.16 kB/s
      2   26.05 kB/s   28.16 kB/s
      3   25.99 kB/s   28.10 kB/s
      4   26.13 kB/s   28.11 kB/s
      5   26.14 kB/s   28.07 kB/s
---------------------------------
Average   26.10 kB/s   28.14 kB/s
---------------------------------

Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.7 Safari/533.2
2010-04-12 19:06:04 +02:00
David Majda 3291c70d97 Added \uFEFF (BOM) to the definition of whitespace in the metagrammar.
The Rhino bug that prevented inclusion of \uFEFF among the whitespace characters
is no longer relevant here because we compile character classes into regexps
now, which avoids the infinite recursion.
2010-04-11 11:45:05 +02:00
David Majda 383c5acaa6 Replaced \xA0 by \u00A0 in the whitespace definition in the metagrammar.
This is purely stylistic change.
2010-04-11 11:18:42 +02:00
David Majda 4f4bb34ded Implemented negative character classes (e.g. [^a-z]). 2010-03-20 12:08:45 +01:00
David Majda 22d2ac8ac2 Rewrote implementation of classes to be regexp-based. 2010-03-20 11:24:04 +01:00
David Majda 6bbd88088b Implemented and used PEG.ArrayUtils.each. 2010-03-19 10:38:46 +01:00
David Majda a43d1b33e3 Bootstrapped the grammar parser, yay! I should have done this long ago. 2010-03-13 15:18:57 +01:00