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 次下载

MIT/Apache

68KB
1.5K SLoC

ngc - Rust 的 G-Code 解析/评估器

Build Status Build Status

正在进行中!

目前,只有解析器是可用的。

文档

模块文档托管在 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