此刻支持的语法示例:

sum = 0number = 1while number < 4 {  sum = sum + number  number = number + 1}print(sum) 

添加了比较(包括且、或)、while循环相关语法,详见语法描述。一个有意思的细节是支持这样的布尔操作:xx or yy and zz,其中and优先级高。

RPly 源码中,看到词法分析的机制很单纯。就是按顺序匹配词法规则中的正则表达式, 匹配的就识别为一个词。难怪之前词法规则的添加顺序不同直接影响分析结果。词法规则设计感觉挺容易出错,回头研究下有没有啥辅助工具。

参照逆向工程,做了一下代码整理,以尽量接近源码结构,以便今后更加方便对比。包括将词法分析器提取到单独文件,将语法分析规则的顺序调整为与逆向相同。在此过程中,居然发现了两处语法分析规则的错误,其中一处比较严重:

表达式声明 : 表达式   

在改正之前,像“2”(数)、“2+1”(二元表达式)这样的表达式是单一“表达式声明”的合法代码。而改为“表达式前缀”后,这些都不合法,也导致了不少相关测试需要修改(还好早发现)。

BTW 木兰交互控制台(REPL)中支持运行2+1是因为套了层 print:

node = self.parser.parse('___=(%s);__print__(___)' % self.stmt, '')

这样设计暂时没看出啥硬伤,也许还有些好处。比如下面这样的 Python 代码是可运行的,输出为 2。但也许程序员原本希望看到的是 3,只是误写代码:

a = 2a + 1print(a)

而在木兰中,同样的代码运行会报错(报错信息是大短板):

SyntaxError: File "xxx.ul", line 2:3, unexpected token "+"a + 1  ^ 

从这个角度来说,这样的设计似乎可以更早发现不必要的代码误写。

语法分析器 220 行(不包括 ast 库的 API中文封装部分),还早着。

设计sample语言的词法分析器_重现木兰编程语言(十)——比较、循环,一个语法设计特色相关推荐

  1. 设计sample语言的词法分析器_华为被曝自研编程语言“仓颉”,南大教授冯新宇领衔...

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 近日,华为要自主研发编程语言的消息忽然在网上火了. 据微博博主@IT工程师 称,华为正在研发新的自主编程语言仓颉,领头人是南京大学的计算机科 ...

  2. 浅谈for循环在语法设计上的必要性

    简单完整的单层for循环依我的理解,就是一连串的if. 这些if所判断对象的和最后一步的操作对象都是同一个变量,而且这些if块所包含的代码块完全一样. 所以为了避免代码冗余,有了for循环这种语法结构 ...

  3. 单片机c语言篮球比分_基于单片机的篮球比赛计时计分器的设计

    摘 要:本系统是采用单片机AT89C51作为本设计的核心原件.利用7段共阴LED作为显示器件.在此设计中共接入了2个7段共阴LED显示器,用于记录得分和比赛时间,显示范围可以达到0到99分,基本满足赛 ...

  4. 设计sample语言的语法_Verilog语法之〇:Verilog HDL简介

    本文首发于微信公众号"花蚂蚁",想要学习FPGA及Verilog的同学可以关注一下. 众所周知,学习FPGA必须首先掌握一门硬件描述语言,所以我为初学者小白们将Verilog语法进 ...

  5. java设计最简单记账本_家庭记账本小程序之前端页面设计(java web基础版一)

    1 2 3 4 5 6 7 编辑消费记录 8 9 10 11 12 13 $(function() {14 //提示用户添加失败,删除失败,修改失败 15 if(!${ empty requestSc ...

  6. 如何设计mysql的表结构_数据库的数据表的结构是如何设计的?

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对 ...

  7. 2位数码管显示00-99的89c51单片机电子秒表设计c语言,2位数码管显示00-99的89c51单片机电子秒表设计 的程序和电路图...

    这是一款对如何使用单片机 控制数码管有详细的介绍 CLEAR: CLR TR0 MOV 40H,#0 AJMP K1 T0INT: MOV TH0,#3CH MOV TL0,#0B0H DJNZ R0 ...

  8. c语言交换a b(运算符),关于编程语言:是否有一个复合赋值运算符用于a = b

    在许多语言中,a = a + b可以写成+ = b 在数值运算的情况下,a + b与b + a相同,因此单个复合运算符就足够了. 此外,a = a - b可以写为 - = b. 但是,a-b不等于b- ...

  9. ab st语言编程手册_木兰编程语言 0.0.14.7:功能覆盖初版用户手册;Gitee Go 流水线尝鲜...

    木兰编程语言 在 2020 年度 OSC 中国开源项目评选 中已获得 26 票,请投票支持! 年初对原始木兰可执行文件 ulang-0.2.2.exe 作了些功能上的摸索尝试,将基本功能写在初版用户手 ...

最新文章

  1. Microsoft Azure 云存储服务概念
  2. Go语言 goroutine
  3. 西门子s7-200解密软件下载_西门子S7200仿真软件如何使用?
  4. php redis新增数据类型,Redis有哪几种数据类型
  5. wav音量和分贝转换关系_电吉他音箱瓦数与音量大小之间的关系
  6. 合奏:机器学习中唯一(几乎)免费的午餐
  7. LeetCode 353. 贪吃蛇(deque+set)
  8. python与数据处理_python数据处理:数据合并和Reshaping
  9. 面试—每日一题(8)
  10. 读书笔记之inside JVM(4)
  11. WIN10什么都没开内存占用率过高, WIN7单网卡设置双IP
  12. es elasticsearch-head安装
  13. python time和datetime、pytz
  14. 同济大学Python程序设计基础 实验一:Python程序设计基础
  15. 一些javaweb开发常用工具类
  16. 洛谷B2099 矩阵交换行(swap函数)
  17. android浏览器有桌面模式么,手机浏览器添加到主屏幕(桌面)的图标设置以及WebApp模式...
  18. 开学数码装备分享,大学新生必备数码好物
  19. 二胎准生证办理流程--很有用。
  20. 汇编语言笔记(王爽)

热门文章

  1. java异常详细讲解_java异常的讲解
  2. PHP MySQL教程期末考试题及答案,PHPMySQL答案
  3. java集合框架图(二)
  4. 网易 for linux,NetEaseMusic
  5. x的平方加y平加xy的java语言_JAVA语言及网络编程-中国大学mooc-题库零氪
  6. 对接接口文档_接口自动化测试框架设计思路
  7. 公司inur php id_,PHP——个人信息管理系统
  8. unity连接linux服务器,C#编程之C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令...
  9. html将图片做成标签,HTML(图片标签)
  10. python【蓝桥杯vip练习题库】ALGO-148 5-1最小公倍数(GCD)