当前位置: 首页 > 编程日记 > 正文

Parser Generator Tips翻译(中英对译) by Joshua Xu

You can use the ParserWizard command from the Project menu to help you create initial YACC and Lex skeleton source files.
如果需要生成初始的YACC & Lex骨架源文件,可以在系统菜单中,选取Project->ParserWizard。

Use the Parser Generator Registration command from the Tools menu to register your copy of Parser Generator at the appropriate time.
如果需要注册软件,可以在系统菜单中,选取Tools->Parser Generator Registration。

AYACC and ALex are suited for integration into the Visual C++ development environment.  In particular the error messages generated by the two tools are compatible with those recognised by Visual C++.  This means that error mapping from the Output window to the relevant YACC or Lex source file can take place.
AYACC和ALex适合集成到VC++开发环境里面。这两个工具生成的错误信息(error message)是VC++兼容的。
这意味着可以根据VC的输出窗口(output window)里面的错误信息追溯到对应的YACC或Lex源文件。

AYACC and ALex both generate verbose files (.v extension).  These show exactly how the generated parser and lexical analyser will behave in any given circumstances.  If you not sure that your parser or lexical analyser is working correctly, then it is a good idea to look at these at some point.
AYACC和Alex都生成.v文件(verbose)。 这些verbose文件精确地显示了parser和lexical analyser在特定环境中的行为。
如果你无法确定一个语法分析器(parser)或词法分析器(lexical analyser)能否正常工作,有个好主意是先检查verbose文件。

If you are generating multiple model C or C++ and Java parsers and lexical analysers then you will need to give the parser or lexical analyser a name.  This can be done with a Name declaration.  This is introduced with the %name keyword and has a trailing identifier.  For example, %name myparser.
如果生成了多个C/C++/Java语法分析器(Parser)和词法分析器(lexical analyser),那么必须要给它们起个名字。
声明一个变量即可:关键字是%name,后面跟一个标识符。例如:%name myparser。

You can place code in AYACC and ALex generated include files by using an Include Declaration.  These are introduced with the %include keyword and have a trailing declaration code block {...}.  For example, %include { /* a comment */ }.
你可以将需要的代码放入AYACC和ALex生成的include文件中。
关键字是%include,后面跟一个代码块。
例如:%include { /* a comment */ }.

You can now associate destructor actions with symbols in YACC source files.  These will be called whenever the symbol is popped off of the stack, or the lookahead token is discarded, during error recovery.  This is particular handy if the symbol contains allocated memory which would otherwise be lost.
你可以在YACC源文件中将符号(symbol)与析构动作(destructor action)关联起来。
当错误恢复时,这个symbol会被弹出栈顶,或前瞻令牌(lookahead token)被抛弃;此时会执行对应的destructor action。
当某个symbol包含分配内存(new byte[])的动作时,关联析构动作至为方便(这样可以在析构时delete[]内存)。
否则那部分内存就被丢失了。

It is possible for the lexical analyser to get input from elsewhere other than the yyin stream. In order to do this you need to redefine the yygetchar function in your Lex source file.  Note that this applies to single model C lexical analysers, although it is similar for other types as well (yygetchar member for C++ etc).
对一个词法分析器(lexical analyser)而言,除了yyin流,还可以有其它方式获得输入(input)。
如何做到?只需要在lex源文件中,重定义yygetchar函数。

You can change characters in a regular expression to equivalent characters in another code page by using the Code Page Statement.  This has a number of different forms such as: %codepage_ansi, %codepage_oem, %codepage_ascii and %codepage n, where n specifies the code page i.e. 932.
用Code Page语句,可以将某个正则表达式中的字符,改变为另一个代码页(codepage)的同等字符。
这包括一系列语句,比如
%codepage_ansi,
%codepage_oem,
%codepage_ascii,
%codepage n(n代表特定的代码页,比如932)

You can disable and enable trailing break statement generation in Lex actions by using an Action Terminator Statement.  The %break keyword specifies that break statements will be generated and the %return statement specifies that they wont.  This is particularly useful when generating Java code.
使用Action Terminator Statement,可以enable或disable 尾部break语句。关键字%break规定,一定会生成break语句,而%return规定一定不会。 这在生成Java代码的时候特别有用。
(这里翻译得很难懂,原因是我不懂这一块的技术。等我了解多一些知识再来修改)

转载于:https://www.cnblogs.com/presbyter/p/10358166.html

相关文章:

leetcode-455 分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。…

C++模板详解

参考:C 模板详解(一) 模板:对类型进行参数化的工具;通常有两种形式: 函数模板:仅参数类型不同;类模板: 仅数据成员和成员函数类型不同。目的:让程序员编写…

autocad2007二维图画法_cad怎样绘制简单的二维图形

CAD绘制二维图形非常的简单,大家经常用它来画图,下面是学习啦小编带来关于cad怎样绘制简单的二维图形的内容,希望可以让大家有所收获!cad绘制简单二维图形的方法1、绘图菜单绘图菜单是绘制图形最基本、最常用的方法,其中包含了Aut…

MyEclipse 中配置struts2.2.1的方法

MyEclipse中配置Struts2.2.1版本基本步骤:1,首先就是要建立一个web project项目2,设置jdk和servers路径,如果jdk和servers已经配置ok,跳过这一步骤。在菜单中的window选项中配置jdk和servers对于jdk,点击ja…

BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

BZOJLOJ洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍。 对于\(d_i\)不同的情况: Solution 1:xxy tql! 考虑如何把这些数依次填到树里。 首先对于已解锁的节点\(x\)(已解锁是指父节点已经处理完的点,刚开始就是\(fa…

leetcode-376 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3…

bootstrap3中关于布局的两种样式

container:用.container包裹的内容即可实现居中对齐。注意,由于在各分辨率下面都设置了padding 和 固定宽度,.container不能嵌套。row:栏栅系统是把父容器平均分为12列。注意,row可以被嵌套。 通过下表可以详细查看Boo…

adg oracle 架构_云化双活的架构演进,宁夏银行新核心搭载Oracle 19c投产上线

云和恩墨顺利完成宁夏银行新数据中心数据库平台的建设,包括新数据中心RAC搭建、DG搭建、旧数据中心到新数据中心的数据迁移,以及在整个项目生命周期中的实施规范、性能测试保障、压力测试等。6月12日,宁夏银行数据库完成全部迁移,…

MFC里ON_COMMAND_RANGE消息映射的ID问题

今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项ID是我自己定义的,定义如下: #define IDM_SEARCHRECORD0 222240 #define IDM_SEARCHRECORD1 222241 #define IDM_SEARCHRECORD2 222242 #define IDM_SEARCHRECORD3 …

反射拷贝对象的思路:

0 根据构造器创建对象 1.获取传入进来的对象的字段 2.获取字段的类型 3.拼接 set 与get方法 4 获取传入进来的对象的值 并设置给新对象转载于:https://www.cnblogs.com/classmethond/p/10362263.html

leetcode-402 移掉K位数组

给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 : 输入: num “1432219”, k 3 输出: “1219” 解释: 移除掉三个数字 4, 3, 和 2形成一…

c++ using 前置声明_C++ 类的前置声明

今天在研究C”接口与实现分离“的时候遇到了一个问题,看似很小,然后背后的东西确值得让人深思!感觉在学习的过程中有太多的为什么,而每一个为什么背后都隐藏着一些原理和目的,所以得多问自己”为什么“,这样…

测试用的序列化方法

对于实体,进行底层方法测试的时候,经常逐一赋值很麻烦,网上找到序列化xml方法,感觉挺好用的。 前端调用方法时,将实体序列化写入xml文件 //xml路径string filePath "D:\1.xml";using (System.IO.StreamWrit…

HighChart学习-更新数据data Series与重绘

一:HighChart介绍 基于JQuery的纯JavaScript的图标库,支持各种图表显示,同时还支持Mootools 与Prototype详细版本支持在这里: JQuery 1.3.2 - 1.9.x. 2.0.x for modern browsers Mootools 1.2.5 - 1.4.5 Prototype 1.7 支持目…

shell代码模板

批量ssh登录机器#site_search_hosts 10.4.16.205,10.4.20.87,10.4.20.88,10.4.20.89,10.4.20.90,10.4.20.92,10.4.20.93,10.4.21.51,10.4.21.52,10.4.21.53,10.4.21.54,10.4.33.136,10.4.33.137,10.4.33.138,10.4.33.139,10.4.33.140site_search_hosts10.4.16.205,10.4.20.87,1…

leetcode-55 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1…

子分类账知识学习(汇总网上比较有用的资料)

子模块和GL之间关联的变化 12i在功能模块上的变化很多,比如,基本每个模块都启用了MOAC特性,新增加了子帐模块,税模块等等很多新的模块,OPM库存和离散库存集成了。不过这些变化中,大部分不是我们需要重点…

zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM

本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果打印输出到串口终端显示。涉及到AXI BRAM Controller 和 Block Memery Generato…

nagios报警的问题

最近我写了关于naigos监控的安装与配置的技术文档,公司运维按照我的文档部署naigos,发现不能发送报警邮件,经过我的检查,发现问题如下:1、hosts里的配置[rootnagios ~]# cat /etc/hosts # Do not remove the followin…

机器学习常见的分类算法的优缺点

1. 前言 在机器学习中,种类最多的一类算法要属很类算法,本文对机器学习中的各种分类算法的优缺点做一个总结。 2. 贝叶斯分类法 2.1 优点 所需估计的参数少,对于缺失数据不敏感。有着坚实的数学基础,以及稳定的分类效率。2.2 缺点…

公司新来一个同事:为什么 HashMap 不能一边遍历一边删除?一下子把我问懵了!

前段时间,同事在代码中KW扫描的时候出现这样一条:上面出现这样的原因是在使用foreach对HashMap进行遍历时,同时进行put赋值操作会有问题,异常ConcurrentModificationException。于是帮同简单的看了一下,印象中集合类在进行遍历时同时进行删除或者添加操作时需要谨慎,一般使用迭代器进行操作。于是告诉同事,应该使用迭代器Iterator来对集合元素进行操作。同事问我为什么?这一下子把我问蒙了?对啊,只是记得这样用不可以,但是好像自己从来没有细究过为什么?

一文搞懂MySQL索引

官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。看到这里,你是不是对于自己的sql语句里面的索引的有了更多优化想法呢。

leetcode-45 跳跃游戏II

给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标…

做技术到底可以做到哪种地步-技术为什么越走越窄 (转)

尽管做技术已经有不少年头了,不管是犹犹豫豫还是坚定不移,我们走到了现在,依然走在技术这条路上。 不管我们处于何种职位,拿着哪种薪水,其实,我们会是不是的问问自己“做技术到底可以做到那种地步”&#x…

linux本地agent执行脚本_github 4.4K星|马哥教育企业教练团队研发一款轻量级、无Agent自动化运维平台...

马哥教育企业教练团队研发了一款自动化运维平台系统—Spug,上线后广受中小运维爱好者喜爱,目前github4.4k星,已经成为自动化热门项目。2020年了,运维不会搞运维自动化,都不好意思说自己做运维的了,大一点的…

mysql 数据目录更改

[CentOS]MySQL更改数据文件存储目录环境:CentOS(Linux) Mysql5.X 1.如果MySQL已经启动的话,需要先停止MySQL的运行#service mysqld stop2.home 目录下新建目录[data]/home #mkdir data3.移动MySQL默认数据库文件#mv /var/lib/mysql /home/data4.修改MySQ…

leetcode-452 用最少数量的箭引爆气球

在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球…

ssm 异常捕获 统一处理_SpringMVC 统一异常处理介绍及实战

背景什么是统一异常处理目标统一异常处理实战用 Assert(断言) 替换 throw exception定义统一异常处理器类扩展总结《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》…

【iOS开发】企业版证书($299)In-House方式发布指南 (转)

一、明确几个概念 1、企业版IDP:即iOS Development Enterprise Program。注意是$299/Year那种,并不是$99/Year的那种。 2、In House:是只企业内部发布,仅限企业内部人员使用。 二、In-House方式特点 1、不能发布到Appl…

苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)

概述: 苹果的证书繁锁复杂,制作管理相当麻烦,今天决定重置一个游戏项目中的所有证书,做了这么多次还是感觉很纠结,索性直接记录下来,日后你我他查阅都方便; 首先得描述一下各个证书的定位&#…