自制编程语言[试读]
1.1 为什么要制作编程语言
1.1 为什么要制作编程语言 本书的主题是自制编程语言。单说现在被广泛使用的编程语言,就有C、C++、Java、C#、Perl、Python、Ruby、PHP、Lisp、JavaScript 等。可能有人会质疑,既然已经有这么多语言了,真的有必要再特意创造一门新的语言吗?实际上,自制编程语言还是大有益处的。 1. 可以帮助理解编程语言的内部运行机制编程语言是程序员每天都要使用的工具。深刻地理解这个工具,对程序员来说非常重要。 一般来说,重新编写一个与已有程序相似的程序会被说成是“重复发明轮子”,这在行业内是不被认同的。但本书中想要实现的,偏偏是在众多语言存在的前提下再制作一门新的语言,正... 查看全部[ 1.1 为什么要制作编程语言 ]
1.2 自制编程语言并不是很难
一提起自制编程语言,很多人都会觉得这是一件非常难的事情。 比如,即便是一个很常见的赋值语句: a1 = b1+ b2*0.5; 在自制编程语言时都必须考虑到以下几个要点。 1. 需要将 a1、 b1、 b2作为变量名解析出来。如果按照C 语言的语法规则,变量名只能由字母或下划线开头,从变量名第二个字符开始才允许出现字母或数字。所以首先必须扫描这个语句,然后将匹配上述语法规则的部分提取出来。 2. 0.5 是一个含有小数点的常量,在提取这类常量时,能否用“数字组合+ 小数点+ 数字组合”来概括所有常量的特征呢(还要考虑是否允许00.10 这样的数值)。当然我们的提取规则还要能处理2 这... 查看全部[ 1.2 自制编程语言并不是很难 ]
1.3 本书的构成与面向读者
本书由以下的章节构成: ●●第1 章 引子 ●●第2 章 试做一个计算器 ●●第3~4 章 制作无类型语言crowbar ●●第5 章 中文支持与Unicode ●●第6~8 章 制作静态类型的语言Diksam ●●第9 章 应用篇 第1 章即是你正在阅读的章节。本章会对全书的构成以及讲解方式进行说明。 第2章通过制作一个简单的计算器,介绍yacc/lex 的基本使用方法。其实讲解yacc/lex 的部分,选择“计算器”为例实在有点老套,但确实没有比这更合适的题目了。此外还会介绍如何不依赖yacc,使用递归下降分析器(Recursive.Descent.Parser)来制作一个... 查看全部[ 1.3 本书的构成与面向读者 ]
1.4 用什么语言来制作
如前文所述,本书将使用C 语言作为语法处理器的编写语言。 都什么年代了还用C 语言?可能会有人这样想吧。其实就连我自己也会这样想。 但本书还是使用了C 语言,其中一个理由是因为yacc/lex 都是面向C 语言的工具。 yacc/lex 本身是很老的工具。老工具虽然都有一些历史遗留问题,但也有其优点,即正是因为历史悠久,所以会积累下更详尽的技术文档。如前文所述,目前的LL 语言大多使用yacc。 另一个使用C 语言的理由是:想要降低“依赖程度”的话,C 语言是最适合的。 比如说用Java 编写软件,运行环境中必须安装JVM(Java 虚拟机)。如果用C# 则必须要安装.NET.Fra... 查看全部[ 1.4 用什么语言来制作 ]
1.5 要制作怎样的语言
1.5.1 要设计怎样的语法 编程语言有很多种,C、C++、Java、C# 等都是 面向过程的编程语言( C++、Java、C# 虽然也被称为面向对象,但可以把面向对象看作是面向过程的一个派生)。目前看来,虽然面向过程的语言是主流,但还存在Haskell、ML 这样的 函数式编程语言 。函数式编程语言就是“变量值无法被更改”的一种语言*。 对于已经习惯了面向过程语言的人来说,肯定会想“变量值无法更改还怎么写程序呀”。其实这类语言已经编写出了很多实用的程序。在函数式编程的基础上发展出了如Prolog 这样的 逻辑编程语言 以及被称为 并行程序设计语言 的Erlang。 不过目前被广泛使用的... 查看全部[ 1.5 要制作怎样的语言 ]
1.6 环境搭建
1.6.1 搭建开发环境 本书的开发语言是C 语言,辅助工具是yacc 和lex。 UNIX(包含Linux 等)大部分都已经预装了开发所需的yacc 和lex,当然也有例外,而Windows 则默认没有预装。不过无需担心这些,我们完全可以全部使用自由软件来搭建一个可用的开发环境。 那么,下面我们就开始介绍这些软件的获取途径。 1. C 编译器 免费的C 编译器可以使用GNU 项目提供的GCC(GNU.Compiler.Collection)。 Linux 等免费的UNIX 环境下大多都预装了GCC*。Windows 下可以使用MinGW(Minimalist.GNU.for.Wi... 查看全部[ 1.6 环境搭建 ]