2个版本
使用旧的Rust 2015
0.1.1 | 2019年5月15日 |
---|---|
0.1.0 | 2017年8月4日 |
0.0.0 |
|
#288 在 #ast
173 每月下载
在 7 crates 中使用
260KB
4.5K SLoC
conch-parser
一个用于解析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 License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确说明,否则根据 Apache-2.0 许可证定义,您有意提交的任何贡献,只要包含在本作品中,都应按照上述方式双重许可,不附加任何额外条款或条件。