续上文Antlr4: 修改语法规则更接近普通BNF格式.

例程

为先=1
为先 为2
=> 返回false

'为'作为关键词, 与数字可以连写, 但必须与变量名用空格间隔:

变量一=1
变量二=2
变量一×2为 变量二

实现

类似"求积表达式"语法规则模式, 添加如下:

表达式: 等同判断表达式;等同判断表达式:   比较表达式|   等同判断表达式 '==' 比较表达式|   等同判断表达式 '为' 比较表达式|   等同判断表达式 '!=' 比较表达式|   等同判断表达式 '≠' 比较表达式;比较表达式:   求和表达式|   比较表达式 '<' 求和表达式|   比较表达式 '>' 求和表达式|   比较表达式 '<=' 求和表达式|   比较表达式 '>=' 求和表达式|   比较表达式 '≤' 求和表达式|   比较表达式 '≥' 求和表达式;求和表达式: 求积表达式| 求和表达式 '+' 求积表达式| 求和表达式 '-' 求积表达式;

"定制访问器"中添加的部分如下, 由于语法规则模式相同, 构建树算法也相同:

 @Overridepublic 节点 visit表达式(表达式Context 上下文) {return visit(上下文.等同判断表达式());}@Overridepublic 节点 visit等同判断表达式(等同判断表达式Context 上下文) {return 以本身向右扩展为运算节点(上下文, 上下文.等同判断表达式(), 上下文.比较表达式());}@Overridepublic 节点 visit比较表达式(比较表达式Context 上下文) {return 以本身向右扩展为运算节点(上下文, 上下文.比较表达式(), 上下文.求和表达式());}@Overridepublic 节点 visit求和表达式(求和表达式Context 上下文) {return 以本身向右扩展为运算节点(上下文, 上下文.求和表达式(), 上下文.求积表达式());}@Overridepublic 节点 visit求积表达式(求积表达式Context 上下文) {return 以本身向右扩展为运算节点(上下文, 上下文.求积表达式(), 上下文.最小表达式());}
...private 节点 以本身向右扩展为运算节点(ParserRuleContext 上下文, ParserRuleContext 本身子节点, ParserRuleContext 扩展子节点) {节点 比较节点 = visit(扩展子节点);if (本身子节点 == null) {return 比较节点;} else {return 构建运算节点(取运算符(上下文), 本身子节点, 比较节点);}}// 第二个子节点为运算符private 运算符号 取运算符(ParserRuleContext 原始表达式) {int 最后运算符 = ((TerminalNodeImpl) 原始表达式.getChild(1)).symbol.getType();switch (最后运算符) {case 圈5Parser.T加:return 运算符号.加;case 圈5Parser.T減: return 运算符号.減;case 圈5Parser.T乘:case 圈5Parser.T数乘:return 运算符号.乘;case 圈5Parser.T除:case 圈5Parser.T数除:return 运算符号.除;case 圈5Parser.T相等:case 圈5Parser.T为:return 运算符号.相等;default:return null;}}

下面是需要细究的部分, 由于变量名包括了"为"字, 因此如果把这个词-"为"定义在"T变量名"之后, 词法分析就会有问题.

T为: '为';

另外, 如果不添加空格忽略规则, 如果代码里带空格, 也会词法分析错误. 加了此规则之后就支持"为先 为2":

T空格: [ ]+ ->skip;

在"运行器"的"求值"方法中, 添加"相等"支持:

case 相等: return 左结果 == 右结果;

大于(等于), 小于(等于), 不等支持也是类似实现. 源码版本号: program-in-chinese/quan5

转载于:https://www.cnblogs.com/program-in-chinese/p/10487790.html

2018-01-17 Antlr4实现简单语言之整数比较表达式相关推荐

  1. C语言表达式的求解规则,C语言实现整数四则运算表达式的计算

    一.问题重述 [问题描述] 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2  = .计算表达式结果,并输出. 要求: 1.表达式运算符只有+.-.*./ ...

  2. 2018/01/22 爬虫日记

    20171024 ①导入自定义的模块(如类),需要在当前类作导入 类的引用声明,如self.tool = tool.Tool() 20171025 ①正则表达式:两个<><>之 ...

  3. 2018.10.17考试

    2018.10.17考试总结 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡, 但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关, ...

  4. 2018.01.21.一周机器学习周记

    时间:2018.01.21.一周 主要内容 1.整理前期关于决策树的一个小型实践项目文档(实践进行中) 2.搭建TensorFlow环境(进行中) 3.拓展:实践Python的自动化模块pyautog ...

  5. 西工大c语言noj100作业,西工大17秋《C语言程序设计》平时作业

    Q:576696131 微信.Q均是1219895388 西工大17秋<C语言程序设计>平时作业 共题,总分:100分 答题中 分一.单选题共35题,70分 12分 结构化算法是( ). ...

  6. C# 2018.9.17

    C# 2018.9.17 C#的优点: 1,不会有运行时崩溃,解决了C++的痛点一,难预防,难查错 2,使用文件不需要包含进来,只需要using namespace即可,解决了C++的痛点二,包含复杂 ...

  7. 【渝粤教育】国家开放大学2018年春季 0233-21T学前儿童语言教育 参考试题

    试卷编号:0233 2017--2018学年度第二学期期末考试 学前儿童语言教育 2018年7月 1.前语言阶段,儿童发展了三方面能力,即前语言 .前语言 和前语言 . 2. 和 ,这是儿童学话中的关 ...

  8. 2018秋c语言程序设计考试答案,2018年自学考试《C语言程序设计》模拟试题【四篇】...

    [导语]"一分耕耘一分收获",十载寒窗铸直了你挺拔的身姿,丰富的知识拉远你睿智的目光,岁月的流逝反衬出你娇美的容颜,奋斗的道路上,你的身影显得无比的昂扬.你与每一个成功拥抱,你的汗 ...

  9. 2019浙江C语言二级答案,2018年浙江省计算机二级c语言考试真题及答案

    2018年浙江省计算机二级c语言考试真题及答案 [计算机等级考试官网暂未公布2018年浙江省计算机二级c语言考试真题及答案,届时小编会为你第一时间收集整理] 下面是学习啦小编给大家整理的计算机二级c语 ...

最新文章

  1. C# 实现简单打印(二)-打印一个文本文档,打印的内容是多行的
  2. 最新2018年全球DevOps薪资报告:行业和团队选择指南
  3. HTML5入门之样板和兼容IE浏览器篇
  4. 经济和信息化谋定研究-左晓栋:国家网络安全事件应急预案
  5. 酒店管理系统c语言带注释,酒店管理系统--C语言版.pdf
  6. 树莓派使用STEP7:安装wiringPi硬件外设驱动C库
  7. 手写字母数据集转换为.pickle文件
  8. LeetCode:Remove Nth Node From End of List 移除链表倒第n项
  9. JS-面向对象-创建具有私有属性的构造函数(2种方法)
  10. 【渝粤教育】国家开放大学2019年春季 0755-22T学前儿童艺术教育 参考试题
  11. 驱动人生:英伟达显卡驱动471.11官方版Win10+Win7最新下载地址
  12. MFC:读取整个记事本文件
  13. html基础学习笔记
  14. 华为服务器cpu型号,服务器cpu型号 数字
  15. 串口之DCB结构体详解
  16. Mysql 子查询 (查询语句中带查询语句)
  17. 基本财务管理知识(转载)
  18. HCM 初学 ( 二 ) - 信息类型
  19. python3.9.0a3详细安装教程_Python 3.9.1图文安装教程(附安装包) | 我爱分享网
  20. 达摩院用128张GPU烧出“中文版GPT-3”,我试了下,这文风不是开往幼儿园的车…...

热门文章

  1. bash-shell高级编程-变量的赋值
  2. SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门
  3. PS菜鸟入门 -- 实战演示之磨皮
  4. Judges' Time Calculation
  5. 【译】Why Wayland on Android is a hard problem
  6. 两步搞定Hyperledger主打区块链解决方案Fabric
  7. php 中国标准时间,linux 系统时间与硬件时间与中国标准时间
  8. sql语句多个表补齐四位_SQL学习笔记 - CTE通用表表达式和WITH用法
  9. python dendrogram_【聚类分析】《数学建模算法与应用》第十章 多元分析 第一节 聚类分析 python实现...
  10. qlabel文本改变信号_周明:NLP进步将如何改变搜索体验