词法与语法分析详解
1. 词法与语法分析分离的因素
词法分析和语法分析的分离主要受以下三个因素影响:
- 简单性 :词法分析方法相对语法分析更简单,单独处理词法分析可使该过程更轻松。同时,将有限的词法分析功能从语法分析器中移除,能让语法分析器更简短、更简单。
- 效率 :词法分析器消耗大量的整体编译时间,对其进行优化是合理的,而优化语法分析效果不佳。分离有助于针对性地进行优化。
- 可移植性 :词法分析器依赖平台,因为它读取输入软件应用程序并常对数据进行缓冲。而语法分析器具有很高的灵活性。将软件应用程序中依赖机器的组件分离出来通常是个好主意。
2. 词法分析
2.1 模式匹配基础
计算机程序本质上是模式匹配器,它在给定的字符串中寻找符合预定字符模式的子字符串。模式匹配是计算机的经典功能,早期的 UNIX 版本就已包含,后来许多编程语言如 Perl、JavaScript 等也加入了模式识别功能,C++、Java 和 C# 可通过内置库和工具实现。
2.2 词法分析器的作用
词法分析器是语法分析的前端,从最基本的编程语言层面进行语法分析。编译器将输入程序视为单个字符序列,词法分析器将字符进行逻辑分组,并根据组的结构为这些组赋予内部代码。这些概念性的分组称为词素(lexemes),其内部子类别编码称为标记(tokens)。通过将技术字符串与字符序列模式进行比较来识别词素。标记通常写成十进制数,为便于词法和语法分析器解释,常使用命名变量来表示。
例如,对于