使用Irony开发一个针对G代码的译码器。不想使用Lex&Yacc的原因是:

1.我只会用C#和Python写代码,用Lex&Yacc还得学习新的语法规范,我懒;

2.Lex&Yacc需要安装;

3.Lex&Yacc将词法分析和语法分析分开进行,要分别编写词法规范和语法规范,感觉听起来就很麻烦

之所以使用Irony,是在网上随便搜的时候,发现了这个工具。可以直接添加引用到代码中,使用起来很方便。虽然相关资料不是特别多,但是源代码开放也有一些例子,是用C#写的,所以也能读懂。其次,Irony中词法分析和语法分析是一起进行的,很方便。

关于Irony的资料如下:

https://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit/Introduction

https://www.codeproject.com/Articles/22650/Irony-NET-Compiler-Construction-Kit

https://archive.codeplex.com/?p=irony

https://github.com/IronyProject/

G代码是用来编写数控程序的,这个不是关键了。只需要知道G代码是一种语言,现在我想编写一个译码器,可以将用G代码编写的数控程序翻译成加工函数。

首先要编写符合Irony规范的G代码的语法规范。使用Irony无需安装,只要引用Irony.dll就可以了。

Irony将词法分析和语法分析一起进行,语法规范就相对应的可以分为两部分,第一部分使用NonTerminal()命令来定义G代码中的非终止符。第二部分定义非终止符的语法规范。比如:

var linearinterpo = new NonTerminal("Linear Interpolation");

linearinterpo.Rule = ToTerm("G1")|ToTerm("G01");

使用Irony开发译码器的更多相关文章

  1. 03-组合逻辑电路设计之译码器——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线——普利斯队长精心奉献 课程目标:    1. 再次熟悉Quartus II工程的建立以及完整的FPGA开发流程 2. 以译码器为例学会简单组合逻辑电路设计 实验平台:无 实验原理: 组合逻辑, ...

  2. 【原创】FPGA开发手记(二) VGA接口

    以下内容均以Xilinx的Nexys3作为开发板 1.VGA接口介绍 首先,先看电路图(3*5为例): 标准VGA一共15个接口,但是实际应用的接口信号只用五个:HSYNC,行同步信号:VSYNC,场 ...

  3. 在ASP.NET Core中使用Apworks快速开发数据服务

    不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支 ...

  4. 在.NET Core中使用Irony实现自己的查询语言语法解析器

    在之前<在ASP.NET Core中使用Apworks快速开发数据服务>一文的评论部分,.NET大神张善友为我提了个建议,可以使用Compile As a Service的Roslyn为语 ...

  5. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  6. FPGA开发随笔汇总

    点击标题即可进入相关随笔. DE-SOC开发板VrilogHDL开发相关部分: (本过程需要Verilog HDL 的基本语言基础) 1.FPGA的发展史及FPGA 的基础架构 2.首先看一下友晶DE ...

  7. .NET 开源开发项目【翻译】

    原文地址 本文列出了 .NET 开源开发项目(open source developer projects).意在包括对开发过程的所有方面有所帮组的项目.对于消费项目(consumer project ...

  8. NET Core中使用Irony

    在.NET Core中使用Irony实现自己的查询语言语法解析器   在之前<在ASP.NET Core中使用Apworks快速开发数据服务>一文的评论部分,.NET大神张善友为我提了个建 ...

  9. 嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929   1. 用预处理指令#define 声明一个常数,用 ...

随机推荐

  1. echarts的通用属性的介绍

    通常做数据可视化时,会用到统计图,这里我使用的是Echarts,对于第一次用的人来说,还是有点难度的,主要是里面的属性太多,看的头痛,这里我自己做个笔记 这里的配置项手册里面就是查找各种属性了,在Ec ...

  2. 羽夏看Win系统内核——进程线程篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  3. gin中的query和postform用法

    package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // Que ...

  4. new实例化和反射实例化有什么区别?

    在工厂设计模式中,使用反射实例化,子类可以随便增加,工厂类不需要做任何的修改 使用反射之后最大的好处就是解耦合

  5. CICD流程

    1.开发者git提交代码至gitlab仓库 2.jenkins从gitlab拉取代码,触发镜像构建 3.镜像上传至harbor私有仓库 4.镜像下载至执行机器--k8s node kubelet 5. ...

  6. 3 Ways to Learn Whether a Windows Program is 64-bit or 32-bit

    More than 90% of Windows 8.1 installations are 64-bit and, as a result, more and more people use 64- ...

  7. python 小兵 三元运算符

    1 if 条件成立: 2 val = 1 3 else: 4 val = 2 改成三元运算: val = 1 if 条件成立 else 2 举例 条件成立走左边,条件成立走右边 a = 2 b = 5 ...

  8. 创建一个python类 ,self init相关参数的简单介绍

    一 创建 ''' 一 使用python 语法 创建一个类, 探究self 是干啥的 1 创建一个对象 car 2 写入两个行参 3 定义两个方法 ''' class Car(): ''' 二 init ...

  9. PostgreSQL源码编译

    环境:Ubuntu 16.04+PostgresQL13.2 1.指定安装路径 ./configure --prefix=/opt/postgresql 2.编译安装 sudo make sudo m ...

  10. atomic 原子自增工程用法案例

    案例 1 : 简单用法 atomic_int id; atomic_fetch_add(&id, 1) atomic_uint id; atomic_fetch_add(&id, 1) ...