8 个版本
0.2.6 | 2022 年 3 月 4 日 |
---|---|
0.2.5 | 2021 年 12 月 4 日 |
0.2.4 | 2021 年 1 月 8 日 |
0.2.3 | 2020 年 11 月 14 日 |
0.1.0 | 2019 年 5 月 23 日 |
#1569 在 解析器实现
每月 30 次下载
68KB
1.5K SLoC
ngc - Rust 的 G-Code 解析/评估器
正在进行中!
目前,只有解析器是可用的。
文档
模块文档托管在 docs.rs 上。
示例
以下代码(与 "ngc-parse" 示例二进制文件相同)将文件作为参数,解析它并输出显示形式,即相同的 G-code,但格式一致,并已清除注释。
use std::{env, fs};
use ngc::parse::parse;
fn main() {
let filename = env::args().nth(1).unwrap();
let input = fs::read_to_string(&filename).unwrap();
match parse(&filename, &input) {
Err(e) => eprintln!("Parse error: {}", e),
Ok(prog) => println!("{}", prog),
}
}
lib.rs
:
A G-Code parsing and evaluation library, aiming for compatibility with the LinuxCNC dialect of G-Code.
Currently, it can parse G-Code into an AST, using the Pest parser library. An evaluator is work in progress and the current state can be enabled with the eval feature flag.
基本用法
使用 ngc::parse::parse
获取 AST,然后使用 ngc::ast
中的抽象语法树数据结构进行操作。
稍后,您将能够将其输入到 ngc::eval
的评估器中,该评估器负责评估表达式,检查无效代码和组合,并生成一系列更接近机器级别的指令。
以下代码(与 "ngc-parse" 示例二进制文件相同)将文件作为参数,解析它并输出显示形式,即相同的 G-code,但格式一致,并已清除注释。
use std::{env, fs};
use ngc::parse::parse;
fn main() {
let filename = env::args().nth(1).unwrap();
let input = fs::read_to_string(&filename).unwrap();
match parse(&filename, &input) {
Err(e) => eprintln!("Parse error: {}", e),
Ok(prog) => println!("{}", prog),
}
}
不支持的功能
目前,LinuxCNC 的控制流结构("O 代码")完全不支持。
依赖项
~4MB
~77K SLoC