所有的内容基于《两周自制脚本语言》。

原文中使用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相关推荐

  1. 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 7.)(笔记)解释器 interpreter 解析器 parser 抽象语法树AST

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 7.) 文章目录 python代码 插--后序遍历 C语言代码(有错误) C语言 ...

  2. 实现一个简单的编译器

    简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的 ...

  3. 用python写一个简单的爬虫_Python实现简易Web爬虫详解

    编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...

  4. 一个简单的语言的语法(二):ANTLR的重写规则

    们使用ANTLR来描述了Jerry语言的基本语法,并通过ANTLRWorks来实验该语法对样本代码生成的解析树.但如同上一篇最后所述,这样得到的解析树中有太多对后续处理来说无用的冗余信息.我们需要消除 ...

  5. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  6. 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 8.)(笔记)一元运算符正负(+,-)

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 8.) 文章目录 C语言代码(作者没提供完整的python代码,关键的改动提供了 ...

  7. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 6.)(python/c/c++版)(笔记)

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 6.) 文章目录 python代码 C语言代码 总结 今天是这一天:) &quo ...

  8. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 5.)(python/c/c++版)(笔记)Lexer词法分析程序

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 5.) 文章目录 python代码 C语言代码 总结 你如何处理像理解如何创建解 ...

  9. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 4.)(python/c/c++版)(笔记)

    [编译原理]让我们来构建一个简单的解释器(Let's Build A Simple Interpreter. Part 4.) 文章目录 python代码 C语言代码 总结 在上一篇文章中,您学习了如 ...

最新文章

  1. 【swjtu】数据结构实验4_基于改进KMP算法的子串查找与替换
  2. linux入门之目录结构
  3. Google C++命名规范
  4. 重启redis命令_redis系列之——数据持久化(RDB和AOF)
  5. CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记
  6. ruby 线程id_Ruby中的线程
  7. Perhaps you are running on a JRE rather than a JDK? 关于 idea maven 缓存的问题 清理 idea maven 缓存
  8. 数据仓如何支撑应用?
  9. 深度解读:GAN模型及其在2016年度的进展
  10. 怎么让Go Modules使用私有依赖模块
  11. eclipse同步svn时如何过滤target等文件
  12. Flask详解(下篇)
  13. Q96:过程纹理(Procedural Texture)(0)——概述
  14. 卡特兰数,高精度卡特兰数
  15. iOS非常全的第三方库
  16. 第四方支付跟第三方支付的区别,支付源码有什么用
  17. 整理2008-2017年的所有上市公司海外收入数据
  18. PS轻松制作四种扁平化风格图标
  19. 视频处理之浮雕效果【附源码】
  20. 如何设置Luminati Proxy Manager? Luminati+VMlogin=多个( Facebook, Google, 亚马逊,ebay)等帐号同时登录,批量管理且不被关联。

热门文章

  1. 智能车的转弯部分_江西智能搬运平板车铁路轨道运输车-厂家直销
  2. Vue 中的组件缓存
  3. LeetCode 1861. 旋转盒子(前缀和)
  4. LeetCode 1855. 下标对中的最大距离(双指针)
  5. Java 自定义排序 Comparator
  6. LeetCode 948. 令牌放置(贪心)
  7. LeetCode 527. 单词缩写(Trie树)
  8. LeetCode MySQL 1532. The Most Recent Three Orders(dense_rank + over窗口函数)
  9. LeetCode 278. 第一个错误的版本(二分查找)
  10. LeetCode 51. N皇后 / 52. N皇后 II(回溯)