Max Brunsfeld
d4264d6191
Fix parsing of quantifiers with no upper bound
2018-08-06 13:47:26 -07:00
Max Brunsfeld
e88dd223b2
Support {} quantifier syntax in regexes
2018-07-25 11:29:41 -07:00
Max Brunsfeld
6e72c2943d
Avoid missing field initializer warnings w/o default field syntax
...
The default field syntax aint working on windows
2018-06-14 11:12:04 -07:00
Max Brunsfeld
973e4a44f0
Start work on removing parent pointers
...
Co-Authored-By: Rick Winfrey <rewinfrey@github.com>
2018-05-09 12:22:19 -07:00
Max Brunsfeld
1ca261c79b
Fix some regex parsing bugs
...
* Allow escape sequences to be used in ranges
* Don't give special meaning to dashes outside of character classes
2018-04-06 12:46:06 -07:00
Axel Hecht
345e344377
Tests for issue 158
2018-04-05 14:39:25 +02:00
Max Brunsfeld
186f70649c
Consolidate the unify for detecting conflicting tokens
2018-03-28 10:03:09 -07:00
Max Brunsfeld
43e14332ed
Avoid creating duplicate metadata rules
2018-03-28 10:03:09 -07:00
Max Brunsfeld
b7d0606fbd
Be less conservative in merging parse states with external tokens
...
Also, clean up the internal representation of external tokens
2018-03-16 16:00:40 -07:00
Max Brunsfeld
8c29841adf
Represent repetitions with associative structure
2018-02-12 11:41:56 -08:00
Max Brunsfeld
493db39363
Never move the start rule of a grammar into the lexical grammar
...
This preserves a useful invariant that the root node of the AST is never
a token.
2017-12-07 11:50:27 -08:00
Max Brunsfeld
9d668c5004
Move incompatible token map into LexTableBuilder
2017-08-31 15:46:37 -07:00
Max Brunsfeld
7587353ab6
Avoid unicode literals in tests
...
MSVC tries to normalize them based on the current locale.
2017-08-08 17:10:08 -07:00
Max Brunsfeld
947c161c2f
Use a constructor rather than aggregate initialization for Production
2017-08-08 10:41:54 -07:00
Max Brunsfeld
230f89d0ff
Fix build warnings in tests
2017-08-07 12:19:10 -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
a22386e408
Fix compiler warnings in flatten_grammar_test
2017-07-14 10:26:34 -07:00
Max Brunsfeld
b3a72954ff
Introduce RENAME rule type
2017-07-13 17:17:22 -07:00
Max Brunsfeld
7293e6f0cc
Fix compile warnings
2017-07-12 22:08:36 -07:00
Max Brunsfeld
26a25278cd
When comparing parse items, ignore consumed part of their productions
...
This speeds up parser generation by increasing the likelihood that we'll recognize
parse item sets as equivalent in advance, rather than having to merge their states
after the fact.
2017-07-11 17:30:32 -07:00
Max Brunsfeld
59236d2ed1
Avoid redundant character comparisons in generated lex function
2017-07-10 14:09:31 -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
d8e9d04fe7
Add PREC_DYNAMIC rule for resolving runtime ambiguities
2017-07-06 15:24:45 -07:00
Max Brunsfeld
cb652239f6
Add missing semicolons in flatten_grammar test
2017-07-06 12:48:50 -07:00
Max Brunsfeld
2c043803f1
Be more conservative about avoiding lexing conflicts when merging states
...
This fixes a bug in the C++ grammar where the `>>` token was merged into
a state where it was previously not valid, but the `>` token *was*
valid. This caused nested templates like -
std::vector<std::pair<int, int>>
to not parse correctly.
2017-06-22 15:32:13 -07: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
e2baf0930b
Use simple CharacterSet constructor in LexItem test
2017-03-17 14:47:11 -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
d222dbb9fd
Allow lexer to accept tokens that ended at previous positions
...
* Track lookahead in each tree
* Add 'mark_end' API that external scanners can use
2017-03-13 17:06:52 -07:00
Max Brunsfeld
6dc0ff359d
Rename spec -> test
...
'Test' is a lot more straightforward of a name.
2017-03-09 20:40:01 -08:00