#shell #parser #ast #编程语言

conch-parser

一个用于解析以shell编程语言编写的程序的库

2个版本

使用旧的Rust 2015

0.1.1 2019年5月15日
0.1.0 2017年8月4日
0.0.0 2016年12月5日

#288#ast

Download history 22/week @ 2024-03-11 24/week @ 2024-03-18 24/week @ 2024-03-25 75/week @ 2024-04-01 49/week @ 2024-04-08 14/week @ 2024-04-15 48/week @ 2024-04-22 16/week @ 2024-04-29 37/week @ 2024-05-06 18/week @ 2024-05-13 24/week @ 2024-05-20 22/week @ 2024-05-27 17/week @ 2024-06-03 75/week @ 2024-06-10 56/week @ 2024-06-17 23/week @ 2024-06-24

173 每月下载
7 crates 中使用

MIT/Apache

260KB
4.5K SLoC

conch-parser

Crates.io Documentation Build Status Build Status Coverage

一个用于解析Unix shell命令的Rust库。

快速入门

首先,将以下内容添加到你的 Cargo.toml

[dependencies]
conch-parser = "0.1.0"

然后,你可以开始使用

extern crate conch_parser;

use conch_parser::lexer::Lexer;
use conch_parser::parse::DefaultParser;

fn main() {
    // Initialize our token lexer and shell parser with the program's input
    let lex = Lexer::new("echo foo bar".chars());
    let parser = DefaultParser::new(lex);

    // Parse our input!
    for t in parser {
        println!("{:?}", t);
    }
}

关于

此库提供了解析由POSIX.1-2008标准定义的shell命令。解析器通过将中间结果传递给AST Builder以保持对最终AST表示的无知,从而允许在不遍历和转换整个由解析器生成的AST的情况下轻松更改最终的AST结构。有关更多信息,请参阅文档。

目标

  • 提供正确且高效的shell命令解析器,并保持对最终AST表示的无知
  • 解析不应需要任何形式的运行时,因此源代码的任何部分在解析时都不应被执行或评估

非目标

  • 100% POSIX.1-2008兼容性:该标准用作实现的基线,并且可以根据什么是有意义或最有用的进一步添加(或删除)功能
  • 与所有主要shell的功能相匹配:除非特定功能被广泛使用(并且被认为很常见)或存在其他令人信服的理由需要包含。然而,这并不是说库永远不会支持扩展以添加额外的语法功能。

支持的语法

  • 条件列表(foo && bar || baz
  • 管道(! foo | bar
  • 复合命令
    • 花括号块({ foo; }
    • 子shell($(foo)
    • for / case / if / while / until
  • 函数声明
  • 重定向
  • 重定向文档
  • 注释
  • 参数($foo$@等。)
  • 参数替换(${foo:-bar}
  • 引用(单引号、双引号、反引号、转义字符)
  • 算术替换
    • 标准中要求的常用算术运算(链接)
    • 变量展开
    • 其他内部任意参数/替换展开

许可

根据您的选择,许可协议可以是以下之一

贡献

除非您明确说明,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,只要包含在本作品中,都应按照上述方式双重许可,不附加任何额外条款或条件。

依赖项