Max Brunsfeld
573b5f3671
Pass LexTableBuilder to ParseTableBuilder
2017-08-25 15:57:50 -07:00
Max Brunsfeld
964dd16812
Avoid unicode escape sequences when generating conflict messages
2017-08-09 09:32:58 -07:00
Max Brunsfeld
947c161c2f
Use a constructor rather than aggregate initialization for Production
2017-08-08 10:41:54 -07:00
Max Brunsfeld
e932d09908
Avoid aggregate initialization syntax in places where C++11 doesn't allow it
2017-08-07 13:07:54 -07:00
Max Brunsfeld
bf31c19d03
Avoid initializing production vectors via initializer lists
2017-08-07 12:45:37 -07:00
Max Brunsfeld
255f7af24b
Name ParseTableBuilder fields more consistently
2017-08-04 09:47:24 -07:00
Max Brunsfeld
84e4114f79
Allow conflicts involving repeat rules to be whitelisted, via their parent rule
2017-08-03 15:18:29 -07:00
Max Brunsfeld
119c67dd78
Fix conflict reporting for shift/reduce conflicts w/ multiple reductions
...
We were failing to rule out shift actions with lower precedence.
Signed-off-by: Philip Turnbull <philipturnbull@github.com>
2017-08-02 15:13:30 -07:00
Max Brunsfeld
cb5fe80348
Rename RENAME rule to ALIAS, allow it to create anonymous nodes
2017-07-31 16:41:11 -07:00
Max Brunsfeld
cbdfd89675
Mark reductions as fragile based on their final properties
...
We previously maintained a set of individual productions that were
involved in conflicts, but that was subtly incorrect because
we don't compare productions themselves when comparing parse items;
we only compare the parse items properties that could affect the
final reduce actions.
2017-07-21 09:54:24 -07:00
Max Brunsfeld
4649c3a37f
Avoid creating redundant rename sequences
2017-07-18 15:29:06 -07:00
Max Brunsfeld
b3a72954ff
Introduce RENAME rule type
2017-07-13 17:17:22 -07:00
Max Brunsfeld
561821d011
Remove precedence and associativity methods from ParseAction
2017-07-13 13:41:56 -07:00
Max Brunsfeld
a3006bc2b5
Represent LookaheadSet using vectors of bool
2017-07-12 16:02:01 -07:00
Max Brunsfeld
68c3ba1b8b
🎨 merge_parse_state
2017-07-10 16:46:11 -07:00
Max Brunsfeld
2755b07222
Don't store unfinished item signature on ParseStates
2017-07-10 10:47:38 -07:00
Max Brunsfeld
1586d70cbe
Compute conflicting tokens more precisely
...
While generating the parse table, keep track of which tokens can follow one another.
Then use this information to evaluate token conflicts more precisely. This will
result in a smaller parse table than the previous, overly-conservative approach.
2017-07-07 17:54:24 -07:00
Max Brunsfeld
a98abde529
Provide all preceding symbols as context when reporting conflicts
2017-07-07 14:52:56 -07:00
Max Brunsfeld
c91ceaaa8d
🎨 build_parse_table
2017-07-07 14:52:45 -07:00
Max Brunsfeld
d8e9d04fe7
Add PREC_DYNAMIC rule for resolving runtime ambiguities
2017-07-06 15:24:45 -07:00
Max Brunsfeld
8517313a45
🎨
2017-06-22 15:33:07 -07:00
Phil Turnbull
fdd8792ebc
Correctly set is_first
...
From scan-build: Value stored to 'is_first' is never read
2017-06-14 11:12:06 -04:00
Max Brunsfeld
ed8fbff175
Allow anonymous tokens to be used in grammars' external token lists
2017-03-17 16:31:29 -07:00
Max Brunsfeld
b3edd8f749
Remove use of shared_ptr in choice, repeat, and seq factories
2017-03-17 14:28:13 -07:00
Max Brunsfeld
db4b9ebc7c
Implement Rule as a union rather than an abstract base class
2017-03-17 13:29:31 -07:00
Max Brunsfeld
64e9230071
Use LexTableBuilder to detect conflicts between tokens more correctly
2017-03-08 12:47:38 -08:00
Max Brunsfeld
abf8a4f2c2
🎨
2017-03-01 22:15:26 -08:00
Max Brunsfeld
686dc0997c
Avoid introducing certain lexical conflicts during parse state merging
...
The current pretty conservative approach is to avoid merging parse states which
would cause a pair tokens to co-exist for the first time in any parse state,
where the two tokens can start with the same character and at least one of the
tokens can contain a character which is part of the grammar's separators.
2017-02-27 22:54:38 -08:00
Max Brunsfeld
3c8e6f9987
Restructure parse state merging logic
...
* Remove remnants of templatized remove_duplicate_states function
* Rename recovery_tokens function to get_compatible_tokens and augment it
also compute pairs of tokens which could potentially be incompatible
2017-02-26 12:23:48 -08:00
Max Brunsfeld
0a6e5f9ee6
Fix some build warnings on gcc
2017-01-31 11:46:28 -08:00
Max Brunsfeld
83514293b5
Allow external tokens to be either visible or hidden
2016-12-05 17:26:11 -08:00
Max Brunsfeld
c16b6b2059
Run external scanners during error recovery
2016-12-05 11:50:24 -08:00
Max Brunsfeld
c966af0412
Start work on external tokens
2016-12-02 16:24:19 -08:00
Max Brunsfeld
be9e79db1b
Avoid incorrect application of precedence
2016-12-01 10:24:06 -08:00
Max Brunsfeld
996ca91e70
Disallow syntax rules that match the empty string (for now)
2016-11-30 23:19:54 -08:00
Max Brunsfeld
5332fd3418
Fix build warnings
2016-11-19 20:47:43 -08:00
Max Brunsfeld
cab1bd3ac5
Make conflict messages explicit about precedence combinations
2016-11-18 17:05:16 -08:00
Max Brunsfeld
5924285e69
🎨
2016-11-18 16:14:05 -08:00
Max Brunsfeld
32387400c6
Rework LR conflict resolution
...
* Unify precedence/associativity-based resolution with the
search for a whitelisted conflict
* Improve conflict error messages
2016-11-18 13:50:55 -08:00
Max Brunsfeld
6935f1d26f
Use hash_combine everywhere
2016-11-16 11:46:22 -08:00
Max Brunsfeld
6cfd009503
Compute parse state group signature based on the item set
2016-11-16 10:21:30 -08:00
Max Brunsfeld
42d37656ea
Optimize remove_duplicate_parse_states method
...
Signed-off-by: Nathan Sobo <nathan@github.com>
2016-11-15 17:51:52 -08:00
Max Brunsfeld
1118a9142a
Introduce Symbol::Index type alias
2016-11-14 10:25:26 -08:00
Max Brunsfeld
fad7294ba4
Store shift states for non-terminals directly in the main parse table
2016-11-14 08:36:06 -08:00
Max Brunsfeld
8d9c261e3a
Don't include reduce actions for nonterminal lookaheads
2016-11-10 11:33:37 -08:00
Max Brunsfeld
255bc2427c
🎨 build_parse_table
2016-11-09 20:47:47 -08:00
Timothy Clem
693c6d40dd
Move setup of mergeable_symbols to constructor, use set throughout
2016-10-18 15:18:33 -07:00
Timothy Clem
14bae584d4
WIP: New check for mergable symbols in merge_state
2016-10-18 13:03:41 -07:00
Max Brunsfeld
e149d94ff5
Remove generated parsers' dependency on runtime.h
2016-10-05 14:02:49 -07:00
Max Brunsfeld
b76574e01c
Handle ambiguities between extra and non-extra tokens using normal GLR splitting
2016-09-06 10:22:16 -07:00