PL/0编译器实践---后记
花了几天时间,把清华版的《编译原理》一书中的PL/0编译器实践了一遍。颇有收获,记录如下:
- 理解代码的技巧,如何理解一份代码,比如这个程序,其逻辑相对于一般程序就比较复杂了,如何翻译,虚拟机代码执行时数据栈如何变化等,都比较抽象,很难在大脑中有形象的感受,这时,最好的办法就是单步调试,比如vs2015就很强大,还能监视变量,绘制流程图,等等。
- 对代码的追求,除了九月十月,感觉最近一段时间一直在学习而不是实践,一方面由于自己习惯不好,被动接受,缺乏思考,比如代码是不是可以更简洁,更优雅;另一方面,自己学习不注重基础,对语言的很多高级特性和高阶技巧不甚了解,所以不能写出优雅高效的代码。比如,我就是修改书上的代码,这份代码写的很简陋,但自己却没有能力去改变,自己对语言真的缺乏深刻的探索,所以写不出好的代码。
- 英语。感觉自己还是要提高英文化的程度。这是融入GitHub以及很多优秀软件的必经之路,比如这次,就尝试在一份网络资料的基础之上制作了一份PL/0的英文用户手册。之前这方面不是很注重,以后还是要有意识的把自己的工作英文化,与主流和前沿接轨。
- 专注程度,所实话,这种难度的工作,可不是写hello world,不专注就会导致低效的重复。但最近真的是,非常不专注。一方面,太过自由,缺乏必要的时间管理,二是对手上的工作缺乏投入。断断续续,很伤效率,真的要改正。不是有多苛刻,完全是自己习惯的问题。
最后,祭出一张调试图片,vs的调试确实直观而强大,在实践中积累工具的使用经验意义也很重大!

PL/0编译器实践---后记的更多相关文章
- PL/0编译器(java version) - MainFrame.java
1: /* 2: * To change this license header, choose License Headers in Project Properties. 3: * To chan ...
- PL/0编译器(java version)–Praser.java
1: package compiler; 2: 3: import java.io.IOException; 4: import java.util.BitSet; 5: 6: /** 7: ...
- PL/0编译器(java version) – SymbolTable.java
1: package compiler; 2: //竟然没有对符号表检查大小,会溢出的. 3: 4: import java.io.IOException; 5: 6: public clas ...
- PL/0编译器(java version) – Symbol.java
1: package compiler; 2: 3: /** 4: * 采用全局变量sym来存储符号码,并用全局变量id和num来传递语义值 5: * 6: * @author jiangnan ...
- PL/0编译器(java version) – Scanner.java
1: package compiler; 2: 3: import java.io.BufferedReader; 4: import java.io.FileNotFoundException; ...
- PL/0编译器(java version)–PL0.java
1: package compiler; 2: 3: import java.io.BufferedWriter; 4: import java.io.FileWriter; 5: 6: /* ...
- PL/0编译器(java version)–Pcode.java
1: package compiler; 2: 3: /** 4: * //虚拟机指令 5: * 6: * @author jiangnan 7: * 8: */ 9: public class ...
- PL/0编译器(java version) - Interpreter.java
1: package compiler; 2: 3: import java.io.BufferedReader; 4: import java.io.BufferedWriter; 5: imp ...
- PL/0编译器(java version) - Err.java
1: package compiler; 2: 3: import java.io.BufferedWriter; 4: 5: public class Err { 6: 7: publi ...
随机推荐
- Using Dagger2 in Android
Dagger2是一个Java和Android的依赖注入框架. 本文介绍Android中dagger2的基本使用. 其中包括@Inject, @Component, @Module和@Provides注 ...
- React Native 之 Touchable 介绍与使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...
- linux 下安装web开发环境
以下使用 linux centos系统 一.JDK的安装 1.下载jdk-8u111-linux-x64.tar.gz 2.解压该文件,将解压后的文件复制到 /usr/local/jdk1.7 目录下 ...
- jedisLock—redis分布式锁实现
一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...
- VS2013无法启动 IIS Express Web解决办法
开发环境:windows8.1+VS2013 使用VS2013有一段时间了,因前期都是编写C/S程序,没有使用到B/S调试器.前几日,创建了一个MVC项目,突然发现VS2013无法调试,报了这样的错. ...
- BZOJ 1212: [HNOI2004]L语言 [AC自动机 DP]
1212: [HNOI2004]L语言 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1367 Solved: 598[Submit][Status ...
- 利用Oracle创建数据库
本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6217151.html 数据库的创建 打开"所有程序"-" ...
- PHP基础语法
PHP:超级文本预处理器一,PHP的四对标记 <?php ?> <script language="php"> <script> ...
- webgl 循环传参画10个点
function main(){ var canvas = document.getElementById("webgl"); var gl = getWebGLContext(c ...