作者:Riceball(riceballl@hotmail.com)
关键字: 编译器, 解释器, LEX, YACC, 编译原理, 正则表达式, Pascal
预备知识:编译原理,正则表达式,Pascal
本文并不希望深入透彻的讲解编译原理,而是讲解如何利用工具(生成编译器的编译器)去编写编译器。如果你完全不知道编译什么东西,那么请看懂了编译原理,在看此文,本文不是为初学者准备的。
一、什么是编译器(解释器)
编译器是将一种计算机语言翻译为另一种计算机语言的程序。编译器将源程序(source language)
编写的程序作为输入,翻译产生用目标语言(target language)编写的等价程序。源程序一般为高级语言(high-level language),如Pascal 或Delphi,而目标语言则是汇编语言或目标机器的目标代码(object code),有时也称作机器代码(machine code)
源程序→ 编译器→ 目标程序
解释器也是同编译器一样的一种语言翻译程序。它与编译器的不同之处在于:它立即执行源程序而不是生成目标代码。从原理上讲,任何程序设计语言都可以被解释或被编译。
(1) 扫描程序(scanner)
由扫描程序(Scanner)阅读源程序(通常以字符流的形式表示),进行词法分析(Lexical analysis),它将源程序翻译成单词ID(Token),放入单词ID(Token)表中。在此过程中,扫描程序会进行简单的拼写检查。
单词ID(Tok