Max Brunsfeld
e93e254518
In lexer, prefer tokens to skipped separator characters
...
This was causing newlines in go and javascript to be parsed as
meaningless separator characters instead of statement terminators
2014-05-30 13:29:54 -07:00
Max Brunsfeld
220e081c49
Remove unnecessary methods on LexTable
2014-05-29 18:28:23 -07:00
Max Brunsfeld
c30055ba18
Fix symbol names for extracted tokens
2014-05-20 08:30:58 -07:00
Max Brunsfeld
649f200831
Expand regex/string rules as part of grammar preparation
...
This makes it possible to report errors in regex parsing
2014-05-19 20:54:59 -07:00
Max Brunsfeld
5245bc01fe
Backfill tests for token extraction in auxiliary rules
2014-05-19 19:05:54 -07:00
Max Brunsfeld
608b5ce02b
Cleanup - extract method in parse table builder
2014-05-12 08:53:28 -07:00
Max Brunsfeld
10d3801d7e
Fix missing symbol names for keywords
2014-05-09 16:14:48 -07:00
Max Brunsfeld
3e0debf814
Fix compile error on gcc
2014-05-09 15:37:30 -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