一个简单的parser
所有的内容基于《两周自制脚本语言》。
原文中使用Java编写。鉴于本人不怎么会写Java(书里面有好奇怪的语法,不懂(逃)),便用C#写了一个简单的parser。
代码输入格式:
1:
i=2+3*3/(4-2)
2:
i=1;
if(i)
{
i=2;
}
3:
i=4;
sum=0;
while(i)
{
i--;
sum = sum +i;
}
sum;
4:
fun name(i,j){ i+j;}
name(2,3);
name(3,6);
5:
kk = fun name(i,j,k){i+j+k;}
kk(1,2,3);
kk(1,2,6);
6:[call c# static function]
invoke("System.Console","WriteLine","helloworld");
or[some shortcuts in this parser]
invoke("print","helloworld");
invoke("time");
截图如下:
1:
2:
不能使用递归,这是我留的一个bug,只是有点不想改而已,感觉添加递归会很慢。
毕竟是java,╮(╯▽╰)╭,都不知道为何看作者写的代码这么别扭(好吧,我只是觉得 类似【@XXX】 很费解,)。虽然是按照书上来的,但鉴于java不熟悉,里面很多细节全都是我自己乱想的,可以说没什么优化。权当学习编译原理了。
有兴趣的可以去https://github.com/kalluwa/HelloWorld 自己研究。
转载于:https://www.cnblogs.com/kalluwa/p/4235896.html
一个简单的parser相关推荐
- 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 7.)(笔记)解释器 interpreter 解析器 parser 抽象语法树AST
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 7.) 文章目录 python代码 插--后序遍历 C语言代码(有错误) C语言 ...
- 实现一个简单的编译器
简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的 ...
- 用python写一个简单的爬虫_Python实现简易Web爬虫详解
编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...
- 一个简单的语言的语法(二):ANTLR的重写规则
们使用ANTLR来描述了Jerry语言的基本语法,并通过ANTLRWorks来实验该语法对样本代码生成的解析树.但如同上一篇最后所述,这样得到的解析树中有太多对后续处理来说无用的冗余信息.我们需要消除 ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 8.)(笔记)一元运算符正负(+,-)
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 8.) 文章目录 C语言代码(作者没提供完整的python代码,关键的改动提供了 ...
- 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 6.)(python/c/c++版)(笔记)
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 6.) 文章目录 python代码 C语言代码 总结 今天是这一天:) &quo ...
- 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 5.)(python/c/c++版)(笔记)Lexer词法分析程序
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 5.) 文章目录 python代码 C语言代码 总结 你如何处理像理解如何创建解 ...
- 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 4.)(python/c/c++版)(笔记)
[编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 4.) 文章目录 python代码 C语言代码 总结 在上一篇文章中,您学习了如 ...
最新文章
- 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换
- linux入门之目录结构
- Google C++命名规范
- 重启redis命令_redis系列之——数据持久化(RDB和AOF)
- CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记
- ruby 线程id_Ruby中的线程
- Perhaps you are running on a JRE rather than a JDK? 关于 idea maven 缓存的问题 清理 idea maven 缓存
- 数据仓如何支撑应用?
- 深度解读:GAN模型及其在2016年度的进展
- 怎么让Go Modules使用私有依赖模块
- eclipse同步svn时如何过滤target等文件
- Flask详解(下篇)
- Q96:过程纹理(Procedural Texture)(0)——概述
- 卡特兰数,高精度卡特兰数
- iOS非常全的第三方库
- 第四方支付跟第三方支付的区别,支付源码有什么用
- 整理2008-2017年的所有上市公司海外收入数据
- PS轻松制作四种扁平化风格图标
- 视频处理之浮雕效果【附源码】
- 如何设置Luminati Proxy Manager? Luminati+VMlogin=多个( Facebook, Google, 亚马逊,ebay)等帐号同时登录,批量管理且不被关联。
热门文章
- 智能车的转弯部分_江西智能搬运平板车铁路轨道运输车-厂家直销
- Vue 中的组件缓存
- LeetCode 1861. 旋转盒子(前缀和)
- LeetCode 1855. 下标对中的最大距离(双指针)
- Java 自定义排序 Comparator
- LeetCode 948. 令牌放置(贪心)
- LeetCode 527. 单词缩写(Trie树)
- LeetCode MySQL 1532. The Most Recent Three Orders(dense_rank + over窗口函数)
- LeetCode 278. 第一个错误的版本(二分查找)
- LeetCode 51. N皇后 / 52. N皇后 II(回溯)