使用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. 小程序循环时的item问题

    平常在做小程序时,比如循环渲染数据时,如果有多个数据层次,一般都会这样 wx:for-item=item2,它的意思只是简单的起了一个wx:for循环值的别名,不是表示循环item2,index2同理 ...

  2. 利用词向量进行推理(Reasoning with word vectors)

    The amazing power of word vectors | the morning paper (acolyer.org) What is a word vector? At one le ...

  3. eureka 集群的实现方式?

    注意,本文还是对上一篇博客的延续,需要的配置,在前面的博客里面可以找到. eureka集群版 (正宗的eureka!) 2.1.配置eureka的集群之前首先先配置HOSTNAME和IP的映射 具体的 ...

  4. springboot 配置springmvc?

    package com.aaa.zxf.config; import org.springframework.boot.SpringBootConfiguration; import org.spri ...

  5. List去重复

    HashSet hs = new HashSet(li1); //此时已经去掉重复的数据保存在hashset中 HashSet不能给cbx.datasource赋值,要转成list再赋值 List t ...

  6. Git标签 简单操作

    感谢廖雪峰老师,以下内容多数来自老师的Git教程. 另有部分参考Git中文文档. 创建 命令git tag <tagname> [commit id]用于新建一个标签,默认为HEAD; 也 ...

  7. 对JSP中的Session 简单理解

    我的理解: 简单来说,要使用服务器端的session对象,就是要有其对应的key,即sessionid,它只认识sessionid. 下面我说的cookie,url重写或者隐藏表单,都是为了将其对应的 ...

  8. Ubuntu 18.04 修改默认源为国内源

    1.备份/etc/apt/sources.list #备份 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.在/etc/apt/sources ...

  9. 【linux运维】Linux服务器玩转vsftpd安装与配置

    Linux服务器搭建ftp详细教程. 前言 本文,主要以vsftp软件为主进行讲解,版本为3.0.2.以介绍设置虚拟用户.权限验证为主,linux权限知识默认大家都有所了解.vsftpd设置有两种模式 ...

  10. JS 获取JSON返回的时间值转换为通常格式展示

    var date = new Date(parseInt(数据源.slice(6)));   //获取到时间  年月日时分秒 var result = date.getFullYear() + '/' ...