重拾《 两周自制脚本语言 》- 支持中文标识符
前文将《 两周自制脚本语言 》测试中使用的接口中文化. 在将此脚本语言改为中文关键字之前, 需要先让它支持中文标识符.
首先添加一个词法分析器测试:
@Testpublic void test读中文() throws 分析例外 {词法分析器类 词法分析器 = 词法分析功用.新建词法分析器("中文变量1名 = 中文ok值");词类 词1 = 词法分析器.读();词类 词2 = 词法分析器.读();词类 词3 = 词法分析器.读();词法分析功用.词为标识符("中文变量1名", 词1);词法分析功用.词为标识符("=", 词2);词法分析功用.词为标识符("中文ok值", 词3);}
预期的应该不能通过测试, 结果的确不成功, 但是"卡"住了而非报错. 调试后看到问题出在这段:
int lineNo = reader.getLineNumber();Matcher matcher = pattern.matcher(line);matcher.useTransparentBounds(true).useAnchoringBounds(false);int pos = 0;int endPos = line.length();while (pos < endPos) {matcher.region(pos, endPos);if (matcher.lookingAt()) {addToken(lineNo, matcher);pos = matcher.end();}elsethrow new 分析例外("bad token at line " + lineNo);}
改为中文命名以更易于理解:
int 行数 = reader.getLineNumber();Matcher 匹配器 = 模式.matcher(行);匹配器.useTransparentBounds(true).useAnchoringBounds(false);int 头 = 0;int 尾 = 行.length();while (头 < 尾) {匹配器.region(头, 尾);if (匹配器.lookingAt()) {添加词(行数, 匹配器);头 = 匹配器.end();}elsethrow new 分析例外("bad token at line " + 行数);}
看到进入死循环的直接原因是匹配器.lookingAt()
虽然为true
, 但头
始终为0. 更深原因可自行研究原正则表达式.
为了添加中文标识符支持, 需要使正则表达式能够匹配中文字符, 参考Detecting if NSString contains chinese characters
将原模式中的[A-Z_a-z][A-Z_a-z0-9]*
改为[\\p{script=Han}A-Z_a-z][\\p{script=Han}A-Z_a-z0-9]*
. 之后开头的词法分析器测试通过.
为检验更复杂一些的源码, 对第九章的原本测试用源码使用中文命名:
class 位置类 {经 = 纬 = 0def 到达 (经度, 纬度) {经 = 经度; 纬 = 纬度;}
}
位置 = 位置类.new
位置.到达(3, 4)
位置.经 = 10
和 = 位置.经 + 位置.纬
测试通过~ 源码提交在此
转载于:https://www.cnblogs.com/program-in-chinese/p/10545285.html
重拾《 两周自制脚本语言 》- 支持中文标识符相关推荐
- 为《 两周自制脚本语言 》添加中文测试代码
源自自制编译器+自制脚本语言+自制编程语言 三书比较? 两年多前只看了一本的前六章: 实践"两周自制脚本语言"一书[java吧]_百度贴吧 当时是希望一路添加测试用例, 并且最终把 ...
- c 语言编写脚本优化,两周自制脚本语言-第11天 优化变量读写性能
第11天 优化变量读写性能 以变量值的读写为例,向读者介绍基于这种理念的语言处理器性能优化方式. 11.1 通过简单数组来实现环境 假如函数包含局部变量x与y,程序可以事先将x设为数组的第0个元素,将 ...
- 两周自制脚本语言--第二天 设计程序设计语言
stone具备的语法功能 整数四则运算 字符串处理 变量 控制语句if while 无需指定数据类型,类似python 如果语句末尾换行,则不需要使用':',类似python i= 1: a=2: 或 ...
- java现代编译原理pdf脚本之家,两周自制脚本语言 PDF 高清版
用python写了个数据迁移脚本,主要是利用从库将大的静态表导出表空间,载导入到目标实例中. #!/usr/bin/env python3#-*- coding:utf8 -*-#author:zha ...
- 两周自制编程语言读书总结
总结 两周自制脚本语言这本书,可以做为了解编译原理的入门书籍,当然其内容是远远不够的,毕竟在大学里编译原理可是要学一整个学期的.说是入门书籍,但是对于新手而言,两周想弄懂也是不够的,里面很多内容很跳跃 ...
- Java7 一些新特性及脚本语言支持API--笔记
1.switch条件语句中可以加入字符串了,实现方法是利用了字符串的hashcode()值作业真正的值 2.增加了一种可以在字面量中使用的进制,二进制,通过在数字前面加"0b"或& ...
- 学习笔记之编程达到一个高的境界就是自制脚本语言(图)
学习笔记之编程达到一个高的境界就是自制脚本语言(图) 编程达到一个高的境界就是自制脚本语言,通过这可以精通编程里面的高深的技术,如编译原理.语言处理器.编译器与解释器,这些都是代表一个程序员实力的技术 ...
- 为什么自制脚本语言是编程语言的最高境界?
编程达到一个高的境界就是自制脚本语言,通过这可以精通编程里面的高深的技术,如编译原理.语言处理器.编译器与解释器,这些都是代表一个程序员实力的技术. 每个程序员都有实现属于自己编程语言的梦想,说其是梦 ...
- java 脚本语言交互_Java学习笔记--脚本语言支持API
Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...
- python语言支持中文字符作为量变_尔雅尔雅汉语揭秘章节考试答案
运营是让产品持续产生产品价值和商业价值目的. [多选题]作为现代战略营销的核心,STP营销是企业制定有效营销组合策略的基础和前提,其内容包括 ( ) A. 市场进入 B. 细分市场 C. 目标营销 D ...
最新文章
- 【javascript】—— JS判断浏览器类型、操作系统
- 算法导论笔记:13-02红黑树插入
- 关于props的注意事项!
- OD逆向调试程序的笔记
- yii开启gii功能
- 参数 中_理解JavaScript中函数的参数
- discuz集思街淘宝客模板
- java中用单例模式有什么好处
- 一块神奇的树莓派电子板竟让我学会了Linux系统
- java NIO 复习
- 11.深入分布式缓存:从原理到实践 --- Aerospike原理及广告业务应用
- UmiJS介绍--快速上手(一)
- html中倒计时函数,关于倒计时的函数
- java contains 大小写_使用.contains方法忽略大小写的选项?
- 华为U5800刷机,Root权限
- 职场中的你有危机感吗?在职提升来社科院与杜兰大学金融管理硕士项目
- 虹科干货 | 零售业数智升级不掉队,get数据,get未来!
- 移动前端webapp(html5页面)
- Incremental Learning of Object Detectors without Catastrophic Forgetting详解
- 高版本Chrome网页直接播放海康威视大华RTSP流方案,不需服务器转码转流,支持H.265、H.264及2K/4K高清视频
热门文章
- 拓端tecdat|R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据
- 拓端tecdat|R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测
- 拓端tecdat|如何用R语言绘制生成正态分布图表
- 拓端tecdat|R语言自定义两种统计量度:平均值和中位数,何时去使用?
- 拓端tecdat|用R语言和python进行社交网络中的社区检测
- c语言开发实际,21实际c语言教程-1 (转)
- vue 使用了浏览器的刷新之后报错_98、解决vue-cli3项目运行时sockjs报错问题
- rhel linux 自动 fsck,red hat as 4 启动报错:checking filesystems fsck.ext3: bad magic number ......
- 数据科学常用Python库介绍--Numpy、Scipy、Pandas、Matplotlib、Plotly、SciKit-Learn等
- yolov4-tiny目标检测模型实战——学生姿势行为检测