前文将《 两周自制脚本语言 》测试中使用的接口中文化. 在将此脚本语言改为中文关键字之前, 需要先让它支持中文标识符.

首先添加一个词法分析器测试:

  @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

重拾《 两周自制脚本语言 》- 支持中文标识符相关推荐

  1. 为《 两周自制脚本语言 》添加中文测试代码

    源自自制编译器+自制脚本语言+自制编程语言 三书比较? 两年多前只看了一本的前六章: 实践"两周自制脚本语言"一书[java吧]_百度贴吧 当时是希望一路添加测试用例, 并且最终把 ...

  2. c 语言编写脚本优化,两周自制脚本语言-第11天 优化变量读写性能

    第11天 优化变量读写性能 以变量值的读写为例,向读者介绍基于这种理念的语言处理器性能优化方式. 11.1 通过简单数组来实现环境 假如函数包含局部变量x与y,程序可以事先将x设为数组的第0个元素,将 ...

  3. 两周自制脚本语言--第二天 设计程序设计语言

    stone具备的语法功能 整数四则运算 字符串处理 变量 控制语句if while 无需指定数据类型,类似python 如果语句末尾换行,则不需要使用':',类似python i= 1: a=2: 或 ...

  4. java现代编译原理pdf脚本之家,两周自制脚本语言 PDF 高清版

    用python写了个数据迁移脚本,主要是利用从库将大的静态表导出表空间,载导入到目标实例中. #!/usr/bin/env python3#-*- coding:utf8 -*-#author:zha ...

  5. 两周自制编程语言读书总结

    总结 两周自制脚本语言这本书,可以做为了解编译原理的入门书籍,当然其内容是远远不够的,毕竟在大学里编译原理可是要学一整个学期的.说是入门书籍,但是对于新手而言,两周想弄懂也是不够的,里面很多内容很跳跃 ...

  6. Java7 一些新特性及脚本语言支持API--笔记

    1.switch条件语句中可以加入字符串了,实现方法是利用了字符串的hashcode()值作业真正的值 2.增加了一种可以在字面量中使用的进制,二进制,通过在数字前面加"0b"或& ...

  7. 学习笔记之编程达到一个高的境界就是自制脚本语言(图)

    学习笔记之编程达到一个高的境界就是自制脚本语言(图) 编程达到一个高的境界就是自制脚本语言,通过这可以精通编程里面的高深的技术,如编译原理.语言处理器.编译器与解释器,这些都是代表一个程序员实力的技术 ...

  8. 为什么自制脚本语言是编程语言的最高境界?

    编程达到一个高的境界就是自制脚本语言,通过这可以精通编程里面的高深的技术,如编译原理.语言处理器.编译器与解释器,这些都是代表一个程序员实力的技术. 每个程序员都有实现属于自己编程语言的梦想,说其是梦 ...

  9. java 脚本语言交互_Java学习笔记--脚本语言支持API

    Java语言的动态性之脚本语言支持API 随着Java平台的流行,很多的脚本语言(scripting language)都可以运行在Java虚拟机啊上,其中比较流行的有JavaScript.JRuby ...

  10. python语言支持中文字符作为量变_尔雅尔雅汉语揭秘章节考试答案

    运营是让产品持续产生产品价值和商业价值目的. [多选题]作为现代战略营销的核心,STP营销是企业制定有效营销组合策略的基础和前提,其内容包括 ( ) A. 市场进入 B. 细分市场 C. 目标营销 D ...

最新文章

  1. 【javascript】—— JS判断浏览器类型、操作系统
  2. 算法导论笔记:13-02红黑树插入
  3. 关于props的注意事项!
  4. OD逆向调试程序的笔记
  5. yii开启gii功能
  6. 参数 中_理解JavaScript中函数的参数
  7. discuz集思街淘宝客模板
  8. java中用单例模式有什么好处
  9. 一块神奇的树莓派电子板竟让我学会了Linux系统
  10. java NIO 复习
  11. 11.深入分布式缓存:从原理到实践 --- Aerospike原理及广告业务应用
  12. UmiJS介绍--快速上手(一)
  13. html中倒计时函数,关于倒计时的函数
  14. java contains 大小写_使用.contains方法忽略大小写的选项?
  15. 华为U5800刷机,Root权限
  16. 职场中的你有危机感吗?在职提升来社科院与杜兰大学金融管理硕士项目
  17. 虹科干货 | 零售业数智升级不掉队,get数据,get未来!
  18. 移动前端webapp(html5页面)
  19. Incremental Learning of Object Detectors without Catastrophic Forgetting详解
  20. 高版本Chrome网页直接播放海康威视大华RTSP流方案,不需服务器转码转流,支持H.265、H.264及2K/4K高清视频

热门文章

  1. 拓端tecdat|R语言混合效应逻辑回归(mixed effects logistic)模型分析肺癌数据
  2. 拓端tecdat|R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测
  3. 拓端tecdat|如何用R语言绘制生成正态分布图表
  4. 拓端tecdat|R语言自定义两种统计量度:平均值和中位数,何时去使用?
  5. 拓端tecdat|用R语言和python进行社交网络中的社区检测
  6. c语言开发实际,21实际c语言教程-1 (转)
  7. vue 使用了浏览器的刷新之后报错_98、解决vue-cli3项目运行时sockjs报错问题
  8. rhel linux 自动 fsck,red hat as 4 启动报错:checking filesystems fsck.ext3: bad magic number ......
  9. 数据科学常用Python库介绍--Numpy、Scipy、Pandas、Matplotlib、Plotly、SciKit-Learn等
  10. yolov4-tiny目标检测模型实战——学生姿势行为检测