使用自动机和正则表达式判断字符串是否合法。
构造词法分析器的方法可以分为人工方法和自动化方法。
3.1.1 词法分析器的功能
①每当程序员敲击键盘上一个键时,自动向计算机输入一个相应的8位二进制码,这种码称为ASCII码。程序在计算机中被表示为ASCII码序列,通常称为源程序文件。
②翻译时的最小语义单位是单词,Token是源程序中单词的内部表示,也称为记号
首先从源程序文件中一个字符一个字符的读字符,并逐个的分离出单词,然后构造他们的机内表示Token。(源程序的处理过程)
关于Token的结构没有统一的规定,至少包含两部分内容:一是单词的类别,二是单词的内容(语义 )。
单词的Token表示也没有固定的模式,其结构可随着编译器的不同而变化。
标识符单词、常量单词、保留字单词
【词法分析器的任务】根据程序的ASCII码序列依次拼出单词的ASCII码表示,然后将其转换成相应的Token码(分为语法分析器的子程序和编译器的独立一遍处理器)
3.1.2 单词识别
词法分时首要任务是如何从源文件中的ASCII码序列依次分离出单词,即如何判定新单词的开始、如何判定一个单词的结束以及如何判定是什么类的单词的问题。(但是比起语法分析还是词法分析简单)
3.1.3 词法分析的复杂性(有时需要根据后面遇到的符号往回扫描)
3.1.4 字符串
如何设计字符串空间?(字符数组法)和(指针数组法)
3.1.5 保留字:关键字不能作为用户定义的标识符。两种处理方法:(保留字表)和(不用保留字表)
保留字表又分为三种(顺序表结构)、(散列表结构)和(散列和顺序表结合的一种结构)
不用保留字表主要思想是(在拼单词的过程中就判断是否为保留字,拼完就判断完了)
3.1.6 空格符、回车符、换行符
空格符分隔单词,回车符和换行符也没有任何实际意义,对错误处理有重要意义(判断bug在第几行出现)
3.1.7 括号类配对预检
有错误不停下,还会继续向下分析,预检就是增加计数器,左括号加一,右括号减一,最后结果为零就配对。
3.1.8 词法错误修正
程序错误可分为三层:(词法层)、(语法层)和(语义层)
词法层:错误的字符;语法层:错误的单词;语义层:语义中出现错误的语法单位。
3.1.9 词法分析独立化的意义