Max Brunsfeld
93df5579b4
Trim whitespace
2014-04-25 22:17:23 -07:00
Max Brunsfeld
5313bb5257
Simplify item set closure function
2014-04-23 13:35:21 -07:00
Max Brunsfeld
e8f2b788d4
Reduce allocations when computing rule transitions
2014-04-23 09:01:57 -07:00
Max Brunsfeld
68d44fd565
Intern symbols during grammar preparation
2014-04-22 23:38:26 -07:00
Max Brunsfeld
33d781f492
Refactor bookkeeping of token starts in lexical rules
...
- Move lex items and parse items into their own files
2014-04-17 13:33:34 -07:00
Max Brunsfeld
a437d39773
Add rule precedence construct
...
Still need to add some way of expressing left and right
associativity
2014-04-15 08:40:46 -07:00
Max Brunsfeld
67243c7e2f
cpplint
2014-04-14 08:38:44 -07:00
Max Brunsfeld
e1e0cc6278
Make sure conflicts returned by compile are unique
2014-04-10 08:38:14 -07:00
Max Brunsfeld
f71d7bae16
Record parse conflicts when compiling grammars
...
Need to remove duplicate conflicts
2014-04-08 18:47:42 -07:00
Max Brunsfeld
3982b73ed6
Start work on recording parse action conflicts
2014-04-08 08:19:55 -07:00
Max Brunsfeld
1da9f1fdfd
Store rule metadata as a map, not a single number
...
Need to store more than just boolean values
2014-04-07 08:50:00 -07:00
Max Brunsfeld
5320cad065
Trim trailing whitespace
2014-04-04 13:10:55 -07:00
Max Brunsfeld
32e94081fa
Backfill tests
2014-04-04 08:07:46 -07:00
Max Brunsfeld
1cc7e32e2d
Fix handling of tokens consisting of separator characters
...
The parser is no longer hard-coded to skip whitespace. Tokens
such as newlines, whose characters overlap with the separator
characters, can now be correctly recognized.
2014-04-03 19:10:09 -07:00
Max Brunsfeld
85b97c4f87
Fix error in merging character set transitions
2014-04-01 13:33:32 -07:00
Max Brunsfeld
7adb0bf34f
Add golang example grammar
...
Also, support '\a' character class shorthand in regexes,
for alphabetical characters
2014-03-29 16:29:34 -07:00
Max Brunsfeld
13c4e6e648
Tweak format for example grammars
2014-03-28 13:51:32 -07:00
Max Brunsfeld
820b6f4020
Fix infinite loops during table generation for left-recursive rules
...
Add function calls for arbitrary expressions and dot property access to javascript grammar
2014-03-26 22:43:08 -07:00
Max Brunsfeld
3f770ff3c3
Remove unused consumed_symbols vector from parse items
2014-03-26 21:04:11 -07:00
Max Brunsfeld
aac0786449
Resolve token conflicts by tokens' order in grammar
2014-03-24 19:18:06 -07:00
Max Brunsfeld
48baf056b4
Store grammars' rules in vectors, not maps
...
This way, we can keep of the order in which the rules
were given, for resolving reduce/reduce conflicts.
2014-03-24 13:17:38 -07:00
Max Brunsfeld
50a90e456b
Handle * quantifier in regex patterns
2014-03-22 20:08:11 -07:00
maxbrunsfeld
a733d31634
Fix spec wording in follow sets spec
2014-03-12 13:06:02 -07:00
Max Brunsfeld
a411e43484
Rename source files: .cpp -> .cc
2014-03-09 22:13:08 -07:00
Max Brunsfeld
10b1bd0f5c
Fix includes in specs
2014-03-09 22:05:05 -07:00
Max Brunsfeld
39aa0ccc91
Add script to trim whitespace
2014-03-09 19:49:35 -07:00
Max Brunsfeld
142671c177
Separate spec helpers files for compiler and runtime specs
2014-03-08 15:26:27 -08:00
Max Brunsfeld
e479773aac
Rename files to avoid duplicate basenames
2014-03-02 15:07:43 -08:00
Max Brunsfeld
df05c75525
Backfill unit tests for follow sets
...
Also, add some comment docs for some compiler functions
2014-02-26 00:39:31 -08:00
Max Brunsfeld
e58a6d8ba7
Start work on error recovery
...
- In runtime, make parse errors part of the parse tree
- Add error state to lexers in which they can accept any token
2014-02-24 18:42:54 -08:00
Max Brunsfeld
e87380a8b7
Make separate PreparedGrammar subclass of Grammar for internal use
2014-02-19 13:36:38 -08:00
Max Brunsfeld
2c56612650
Get makefile working
2014-02-18 09:07:00 -08:00
Max Brunsfeld
9e2dc14182
Extract public compiler API into its own header file
2014-02-17 12:40:46 -08:00
Max Brunsfeld
bf07522026
Fix bug in FIRST set function
2014-02-13 18:52:17 -08:00
Max Brunsfeld
27f305d556
Put rule_can_be_blank function in its own file
2014-02-11 13:21:45 -08:00
Max Brunsfeld
1962c17f45
Remove transition_map class
2014-02-11 13:15:44 -08:00
Max Brunsfeld
3cb65c9c81
Make the EOF be an auxiliary symbol
...
This way, it couldn’t conflict if a user had a rule called “__END__”
2014-02-10 18:53:01 -08:00
Max Brunsfeld
15c9e2d398
Make ordering of cases deterministic in generated parsers
2014-02-10 18:38:01 -08:00
Max Brunsfeld
8baa1396fd
Properly merge transitions on overlapping character sets!
2014-02-10 13:20:43 -08:00
Max Brunsfeld
905a408998
Make separate functions for character-level and syntax-level rule transitions
2014-02-09 14:31:27 -08:00
Max Brunsfeld
d3d25f2683
Represent character sets as sets of character ranges
2014-02-05 18:56:04 -08:00
Max Brunsfeld
8cce11a52a
Rename Character -> CharacterSet, CharacterMatch -> CharacterRange
2014-02-03 13:05:51 -08:00
Max Brunsfeld
5ed5ae7514
In LR(1) items, only store consumed symbols as booleans
...
the booleans represent the symbols point to auxiliary tokens
or not. This is all we need to know for the purpose of building
parse tables. Any other information just leads to redundant
parse states.
2014-01-31 00:13:05 -08:00
Max Brunsfeld
28e10dc722
Fix bug in character rule equality
2014-01-30 13:04:10 -08:00
Max Brunsfeld
7f62e752be
Allow Character rules to handle arbitrary character sets
2014-01-30 08:34:20 -08:00
Max Brunsfeld
7d297f2f9e
Remove auxiliary rules from syntax tree
2014-01-28 22:09:37 -08:00
Max Brunsfeld
ca33c3942a
In parse table, store symbols as Symbol objects, not strings
2014-01-27 13:40:10 -08:00
Max Brunsfeld
3ca2e126be
Remove unnecessary public START and END constants
2014-01-25 21:34:46 -08:00
Max Brunsfeld
8208aae060
Fix transitions for sequences whose left side can be blank
2014-01-23 23:56:37 -08:00
Max Brunsfeld
bb42543f1b
Fix broken compiler test
2014-01-23 13:10:37 -08:00