725cc06464
This PR moves all `compile-fail` tests that fail at the parsing stage to a `parse-fail` directory, in order to use the tests in the `parse-fail` directory to test if the new LALR parser rejects the same files as the Rust parser. I also adjusted the `testparser.py` script to handle the tests in `parse-fail` differently. However during working on this, I discovered, that Rust's parser sometimes fails during parsing, but does not return a nonzero return code, e.g. compiling `/test/compile-fail/doc-before-semi.rs` with `-Z parse-only` prints an error message, but returns status code 0. Compiling the same file without `-Z parse-only`, the same error message is displayed, but error code 101 returned. I'll look into that over the next week. |
||
---|---|---|
.. | ||
.gitignore | ||
check.sh | ||
lexer.l | ||
parser-lalr-main.c | ||
parser-lalr.y | ||
raw-string-literal-ambiguity.md | ||
README.md | ||
RustLexer.g4 | ||
testparser.py | ||
tokens.h | ||
verify.rs |
Reference grammar.
Uses antlr4 and a custom Rust tool to compare
ASTs/token streams generated. You can use the check-lexer
make target to
run all of the available tests.
To use manually:
antlr4 RustLexer.g4
javac *.java
rustc -O verify.rs
for file in ../*/**.rs; do
echo $file;
grun RustLexer tokens -tokens < $file | ./verify $file RustLexer.tokens || break
done
Note That the ../*/**.rs
glob will match every *.rs
file in the above
directory and all of its recursive children. This is a zsh extension.