21个版本 (11个重大更新)
新 0.12.0 | 2024年8月21日 |
---|---|
0.10.0 | 2024年8月20日 |
#104 in 解析工具
每月1,980次下载
70KB
854 代码行
rustylr
将上下文无关文法转换为确定有限自动机(DFA)表,并生成可用于该文法的解析器的Rust代码。
cargo install rustylr
用法
$ rustylr --help
Usage: rustylr [OPTIONS] <INPUT_FILE> [OUTPUT_FILE]
Arguments:
<INPUT_FILE>
input_file to read
[OUTPUT_FILE]
output_file to write
[default: out.tab.rs]
Options:
--no-format
do not rustfmt the output
-l, --lalr
build LALR(1) parser
-v, --verbose
print debug information.
Print the whole rule set (include auto-generated rules), and the shift/reduce resolving process.
此程序在输入文件中搜索'%%'。
'%%'之前的所有内容将按原样复制到输出文件中。上下文无关文法必须后跟'%%'。每行必须遵循rusty_lr#语法。
// my_grammar.rs
use some_crate::some_module::SomeStruct;
enum SomeTypeDef {
A,
B,
C,
}
%% // <-- input file splitted here
%tokentype u8;
%start E;
%eof b'\0';
%token a b'a';
%token lparen b'(';
%token rparen b')';
E: lparen E rparen
| P
;
P: a;
调用命令将生成Rust代码my_parser.rs
。
$ rustylr my_grammar.rs my_parser.rs
有关生成的代码的用法,请参阅文档rusty_lr#开始解析。
依赖关系
~2–9.5MB
~82K SLoC