java 词法分析器_木兰编程语言 0.0.15.0:网络运行环境;词法错误处理

博客介绍了如何使用WebSocket客户端创建木兰编程语言的网络运行环境原型,解决了词法错误处理的问题。作者在服务端截取并改写了Python代码以在木兰环境中运行,并注意到rply框架的bug,通过安装rply最新源码来解决。此外,提供了代码量统计。
摘要由CSDN通过智能技术生成

【安装:pip install ulang,用法与例程请见 PyPI。源码位于开源中国。 注意:必需 python 3.7,源码文件需 UTF-8 编码

之前是用 tkinter 实现的木兰源码编辑器,但一直想将前端部分摆脱对 Python UI 库的依赖(比如“unable to input certain Unicode characters in Text widget”这种问题)。现在用一个 WebSocket 客户端做了个运行环境原型(与前文类似,用木兰源码编写了服务端)。在开发中,为避免将 tk 应用置于其他线程运行,转用基于 HTML 的代码编辑器。效果如下:

abb3474df4db99340ec3c36e5d509c84.png

左侧为代码编辑器(参考了前文《Java源码英翻中网页演示》的实现);右侧上部输入各命令,下部显示输出。

在服务端,从木兰主程序截取了解析和运行木兰代码的 Python 代码段,将其改写为可以读取 exec 输出(为显示输出在客户端)后,再在木兰服务端调用。由于木兰语言并未内置 compile 和 exec 函数,因此这段 Python 代码并未改写为木兰代码。

在基于网络的运行环境外,原本的交互环境中,遇到词法错误会直接退出,体验不佳,在此版本修正。同时发现木兰使用的 rply 框架发布版 0.7.7 有个 bug,导致词法错误的行列号信息缺失,幸运的是发现此 bug 已在 rpl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
八、 设计SAMPLE语言的词法分析器 检查要求: a) 启动程序后,先输出作者姓名、班级、学号(可用汉语、英语或拼音); b) 请求输入测试程序名,键入程序名后自动开始词法分析并输出结果; c) 输出结果为单词的二元式序列(样式见样板输出1和2); d) 要求能发现下列词法错误和指出错误性质和位置: 非法字符,即不是SAMPLE字符集的符号; 字符常数缺右边的单引号(字符常数要求左、右边用单引号界定,不能跨行); 注释部分缺右边的界符*/(注释要求左右边分别用/*和*/界定,不能跨行)。 九、 实验一测试程序与样板输出 测试程序1: 程序名TEST1 and array begin bool call case char constant dim do else end false for if input integer not of or output procedure program read real repeat set stop then to true until var while write abc 123 'EFG' ( ) * + , - . .. / : := ; < <= <> = > >= [ ] 样板输出1:(要求在屏幕上显示) ( 1 , - ) ( 2 , - ) ( 3 , - ) ( 4 , - ) ( 5 , - ) ( 6 , - ) ( 7 , - ) ( 8 , - ) ( 9 , - ) (10 , - ) (11 , - ) (12 , - ) (13 , - ) (14 , - ) (15 , - ) (16 , - ) (17 , - ) (18 , - ) (19 , - ) (20 , - ) (21 , - ) (22 , - ) (23 , - ) (24 , - ) (25 , - ) (26 , - ) (27 , - ) (28 , - ) (29 , - ) (30 , - ) (31 , - ) (32 , - ) (33 , - ) (34 , - ) (35 , - ) (36 , abc ) (37 , 123 ) (38 , EFG ) (39 , - ) (40 , - ) (41 , - ) (43 , - ) (44 , - ) (45 , - ) (46 , - ) (47 , - ) (48 , - ) (50 , - ) (51 , - ) (52 , - ) (53 , - ) (54 , - ) (55 , - ) (56 , - ) (57 , - ) (58 , - ) (59 , - ) (60 , - ) 测试程序2:程序名TEST2 program example2; var A,B,C:integer; X,Y:bool; begin /* this is an example */ A:=B*C+37; X:=’ABC’ end. 样板输出2:(要求在屏幕上显示) (23 , - ) (36 , example2 ) (52 , - ) (33 , - ) (36 , A ) (44 , - ) (36 , B ) (44 , - ) (36 , C ) (50 , - ) (17 , - ) (52 , - ) (36 , X ) (44 , - ) (36 , Y ) (50 , - ) ( 4 , - ) (52 , - ) ( 3 , - ) (36 , A) (51 , - ) (36 , B) (41 , - ) (36 , C ) (43 , - ) (37 , 37) (52 , - ) (36 , X ) (51 , - ) (38 , ABC ) (12 , - ) (46 , - )

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值