Niko Matsakis
51e1f7eb67
Add a regular expression parser and NFA construction code
2015-06-23 09:23:11 -07:00
Niko Matsakis
4379b13c9d
Make type inference smarter, based on the idea that all constraints must
...
have the same type; so if we see errors or cases where we cannot infer a
type, let's just take it from one of the successful alternatives. This
lets us remote the type annotation on `E` (or `T`, depending).
2015-06-22 14:14:03 -04:00
Niko Matsakis
2d53902a4f
remove the name of the grammar, which wasn't really used for anything
2015-06-22 13:31:55 -04:00
Niko Matsakis
fc377940ed
revamp a bit to lay groundwork for better patterns, make sub have actions
2015-06-22 13:08:38 -04:00
Niko Matsakis
1faf1d2841
Start extracting out a utility library with a tokenizer, main
...
fn, etc so I can write more tests
2015-06-22 09:42:19 -04:00
Niko Matsakis
411ff7a6d2
avoid emitting useless warnings
2015-06-22 08:57:43 -04:00
Niko Matsakis
15f1cd1c15
It's alive! It's alive!
2015-06-22 08:51:28 -04:00
Niko Matsakis
7fa99e7c7f
emit uses etc
2015-06-22 08:41:49 -04:00
Niko Matsakis
f8cc8858d7
let user declare use foo
2015-06-22 06:06:58 -04:00
Niko Matsakis
65d4e0b498
prefix all the names; add some #[cfg(test)] attributes
2015-06-22 05:56:56 -04:00
Niko Matsakis
5ee2824726
break out state code into its own module, use __
prefix more
...
so that (eventually) we can bring in user-defined imports
2015-06-22 05:49:33 -04:00
Niko Matsakis
e04d65056b
generate a start fn
2015-06-22 05:16:12 -04:00
Niko Matsakis
bc4172b556
Create a main routine that generates the recursive ascent code
2015-06-21 20:56:38 -04:00
Niko Matsakis
d80403e462
add recursive ascent code; completely untested (not even reachable),
...
but seemingly...complete-ish?
2015-06-21 07:26:07 -04:00
Niko Matsakis
72be539541
intermediate checkpoint: creating rust IR, which may not be worthwhile
2015-06-20 19:43:08 -04:00
Niko Matsakis
13bc31f0ee
add a random parse tree generation facility, use it to provide random inputs
2015-06-20 18:02:52 -04:00
Niko Matsakis
c9502edefd
add a comment
2015-06-20 08:33:09 -04:00
Niko Matsakis
fadd3f2c66
Make a general prefix we can use for later
2015-06-20 08:32:01 -04:00
Niko Matsakis
5c71e53c6b
distinguish lifetimes of the state table from the underlying grammar
2015-06-20 06:03:15 -04:00
Niko Matsakis
a661d9ee94
add an LR(1) interpreter that executes the action tables and constructs
...
a parse-tree. Use is to test the results from the LR(1) table generation
algorithm.
2015-06-20 05:43:06 -04:00
Niko Matsakis
077ed9060d
build up action tables
2015-06-19 19:03:21 -04:00
Niko Matsakis
c66f7e2d40
lr1 construction seems to be working, tests are not yet really stable
2015-06-19 17:28:03 -04:00
Niko Matsakis
990f2a931a
sketch out the state enumeration algorithm
2015-06-19 13:27:24 -04:00
Niko Matsakis
b324075eb3
expand test to test when we are in the middle of a configuration
2015-06-19 10:35:10 -04:00
Niko Matsakis
8c577422bf
Start the naive LR(1) algorithm with support for transitive closures
...
over epsilon moves
2015-06-19 10:17:35 -04:00
Niko Matsakis
4e5204078a
Start working on a naive LR(1) algorithm (seems like a good starting
...
point). Implement first set computation.
2015-06-19 06:42:11 -04:00
Niko Matsakis
334a419c49
Make newtypes for TerminalString and NonterminalString, among other
...
refactorings. I found it was annoying keeping them straight.
2015-06-19 05:30:43 -04:00
Niko Matsakis
048def7654
rather than the hacky Debug impl, just only compare stuff that is more
...
stable (and more imp't anyway)
2015-06-18 06:34:19 -04:00
Niko Matsakis
8dd121a8e7
lower test passes
2015-06-18 06:13:18 -04:00
Niko Matsakis
088ad2f444
remove two unused imports
2015-06-18 05:57:48 -04:00
Niko Matsakis
753244f598
remove nonce (unused)
2015-06-18 05:57:32 -04:00
Niko Matsakis
8755723e7a
kill some dead code, write a lower test (that fails)
2015-06-18 05:57:11 -04:00
Niko Matsakis
9d3f7db25a
Improve the Debug/Display impls
2015-06-18 05:48:08 -04:00
Niko Matsakis
6ea20abb8f
Code up the lowering step (or a rough draft; no tests yet...)
2015-06-18 05:35:09 -04:00
Niko Matsakis
e7b377793b
Add some tests for repeat ops, lay groundwork for lowering
2015-06-17 21:33:14 -04:00
Niko Matsakis
13df4186ed
remove debugging printfs
2015-06-17 17:23:43 -04:00
Niko Matsakis
261c9a1446
remove unnecessary counter
2015-06-17 17:18:26 -04:00
Niko Matsakis
8c111030b0
remove steps from the normalization plan that no longer apply
2015-06-17 17:17:30 -04:00
Niko Matsakis
f282b943ba
normalize away all repeat actions in macro expansion
2015-06-17 17:16:44 -04:00
Niko Matsakis
44d7050ddb
generate action code in macro expand
2015-06-17 15:02:34 -04:00
Niko Matsakis
cc155debd7
Various bits of cleanup; add some routines to compute type repr
...
from parse-tree given types table
2015-06-17 06:16:44 -04:00
Niko Matsakis
9200285d49
Rewrite type inferencer to produce a separate Types table
...
using a simpler types grammar than rewrite the tree in place
2015-06-17 06:05:11 -04:00
Niko Matsakis
975ae0a200
cleanup tests a little
2015-06-16 11:34:01 -04:00
Niko Matsakis
7219b9c2d6
Type inference basically working now
2015-06-16 11:28:41 -04:00
Niko Matsakis
1b94c4276f
Get type inference compiling, cleanup some dead code
2015-06-16 07:50:03 -04:00
Niko Matsakis
6875896e76
Fix macro tests to hide spans
2015-06-16 06:39:12 -04:00
Niko Matsakis
b940c0fab8
Start writing type inferencer, but adding spans broke our tests
2015-06-16 06:20:47 -04:00
Niko Matsakis
3d77afc278
Pull out ()
into their own rule
2015-06-16 04:59:32 -04:00
Niko Matsakis
0d9758c1dd
Add a test for condition matching
2015-06-15 19:15:20 -04:00
Niko Matsakis
411c1be63f
Add a macro facility and add the ability to escape out so we can
...
write some tests for the intermediate results.
2015-06-15 19:01:40 -04:00