21个版本 (11个重大更新)

0.12.0 2024年8月21日
0.10.0 2024年8月20日

#104 in 解析工具

Download history 1054/week @ 2024-08-09 926/week @ 2024-08-16

每月1,980次下载

MIT许可证

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