Commit graph

259 commits

Author SHA1 Message Date
Max Brunsfeld
e4be585c43 Handle ubiquitous tokens at the beginning of programs
As a final step before returning the finished parse tree, check if
there are still multiple nodes on the stack. If so, make the inner
nodes children of the top node.
2014-05-09 12:46:36 -07:00
Max Brunsfeld
3f374c6547 Tidy up 2014-05-08 13:27:48 -07:00
Max Brunsfeld
34137be12d Represent state ids as unsigned shorts
This fixes some signedness conversion warnings
2014-05-08 13:23:46 -07:00
Max Brunsfeld
0a21eee3f0 Remove magic number from generated symbols enums
The symbol numbers 0 and 1 are reserved for 'error' and 'eof',
so the grammar's start symbol is always 2.
2014-05-08 13:14:45 -07:00
Max Brunsfeld
4700e33746 Introduce 'ubiquitous_tokens' concept, for parsing comments and such 2014-05-06 12:54:04 -07:00
Max Brunsfeld
b010e1667e Fix parse action equality method 2014-05-06 12:51:38 -07:00
Max Brunsfeld
63c0e27501 Clean up table builder functions 2014-05-04 23:04:34 -07:00
Max Brunsfeld
1d314d71c2 Separate functions for building parse and lex tables
Now, instead of adding states to the lex table as they are needed
by the parse states, we iterate over the parse states after the fact
and set up their corresponding lex states. This has the nice side
effect that the lex states are in a more readable order.
2014-05-04 22:07:52 -07:00
Max Brunsfeld
b998bb35af Don't use initializer lists for tuples
gcc doesn't allow it.
2014-05-04 19:49:09 -07:00
Max Brunsfeld
b97e4f1de8 Clean up intern symbols function 2014-05-01 23:40:04 -07:00
Max Brunsfeld
3a50171249 Expose all grammar compilation errors 2014-05-01 23:28:40 -07:00
Max Brunsfeld
93620b3ed1 Add keyword helper for making higher-priority string tokens 2014-05-01 13:25:20 -07:00
Max Brunsfeld
a2c125998e Add single quoted strings and regexes to javascript grammar 2014-05-01 12:43:53 -07:00
Max Brunsfeld
6d40dcf881 Add token helper for building token rules
Now you can specify the structure of tokens using
all of the rule functions, not just `str` and `pattern`
2014-05-01 12:43:29 -07:00
Max Brunsfeld
0d763d229d cpplint 2014-04-28 21:46:43 -07:00
Max Brunsfeld
25eda9d889 ISymbol -> Symbol
Interned symbols are now the main type of symbol in use
2014-04-28 20:43:27 -07:00
Max Brunsfeld
faf80aadac Symbol -> NamedSymbol 2014-04-28 20:15:49 -07:00
Max Brunsfeld
66c033e411 Optimize parse item equality 2014-04-28 18:31:03 -07:00
Max Brunsfeld
70ba76762c Optimize item set transitions function further 2014-04-28 18:30:50 -07:00
Max Brunsfeld
ae2450d282 Fix dangling reference error on gcc 2014-04-28 13:06:16 -07:00
Max Brunsfeld
6ea4e6b2b0 Give rules::Visitor a virtual destructor 2014-04-27 23:19:11 -07:00
Max Brunsfeld
4dd1f9fbce Cache state transition computations by grammar rule
This results in a huge speed increase
2014-04-27 23:03:37 -07:00
Max Brunsfeld
4eece88e18 Remove duplicate set insert 2014-04-27 22:08:40 -07:00
Max Brunsfeld
076a27be4a Fix compile error on gcc 2014-04-27 22:08:01 -07:00
Max Brunsfeld
b2cb78166e Give Rule a virtual destructor
Not needed at the moment because rule pointers are are always wrapped
in shared_ptrs. Still, don't want to forget this if I stopped using shared_ptrs
at some point.
2014-04-27 21:49:56 -07:00
Max Brunsfeld
b86203d205 Extract shared helper functions from example grammars 2014-04-27 21:45:05 -07:00
Max Brunsfeld
29bbff655c Store choice rules using vectors, not pairs 2014-04-26 23:21:09 -07:00
Max Brunsfeld
c9e0d4bdf0 Optimize item set closure function 2014-04-26 19:06:34 -07:00
Max Brunsfeld
93df5579b4 Trim whitespace 2014-04-25 22:17:23 -07:00
Max Brunsfeld
c2abfd2d03 Parse '.' in regexes 2014-04-24 13:21:46 -07:00
Max Brunsfeld
7be8d469b8 Add ternary expressions to javascript grammar 2014-04-23 22:15:07 -07:00
Max Brunsfeld
5313bb5257 Simplify item set closure function 2014-04-23 13:35:21 -07:00
Max Brunsfeld
020614824a Avoid unnecessary dynamic cast in symbol equality function 2014-04-23 13:12:39 -07:00
Max Brunsfeld
2b883a72a2 Further reduce allocations in rule transitions functions 2014-04-23 13:12:00 -07:00
Max Brunsfeld
e8f2b788d4 Reduce allocations when computing rule transitions 2014-04-23 09:01:57 -07:00
Max Brunsfeld
3b388d66cd Profile and optimize
- Eliminate unnecessary copies of grammar objects
- Do cheaper comparisons first in equality methods
2014-04-23 08:32:11 -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
d32c8b7dd7 Use const references in a few more places 2014-04-16 18:30:21 -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
5145bba53d Silence missing-initializer warnings for gcc 2014-04-12 20:16:16 -07:00
Max Brunsfeld
e1e0cc6278 Make sure conflicts returned by compile are unique 2014-04-10 08:38:14 -07:00
Max Brunsfeld
53285f7d0c Give rule-specific names to repeat helper rules 2014-04-09 18:41:43 -07:00
Max Brunsfeld
a5816a9624 Refactor rule visitors 2014-04-09 13:28:02 -07:00
Max Brunsfeld
bd5ec68c96 Get generated parsers building under gcc 2014-04-08 22:11:20 -07:00
Max Brunsfeld
6a0a28f4b3 WIP - try to fix travis build 2014-04-08 21:41:38 -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