Type signatures for nested parameterized rules #52
+27
−26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request adds support for type signatures on nested parameterized rules.
Since type signatures can now depend on the types of other rules, it first builds an array of
ShowS
functions that generate typenames given an environment that maps names to types. The array is built in the M monad, so that errors can be reported. Then, a new array of actual type names is built by applying theShowS
functions to the array we are constructing (tying a knot)! The type dependencies should form a DAG, and not a general graph, so no cycles can occur, and the algorithm will terminate. The new array maps both terminals and non-terminals to their respective types; however, terminals are always mapped to the token type, so any token that uses a$$
will yield the wrong type.