在前面的字符元素类定义中,字符分类函数一直都是空函数,现在,要回过头把这个坑给填上了。
字符分类的设想
字符分类的根本目的是为词法分析做准备,是为词法分析服务的。而在类C语言中,单词可分为6类:
- 1、关键字
- 2、标识符
- 3、数字常量
- 4、字符串常量
- 5、操作符(又可称为运算符)
- 6、界符(又可称为分隔符)
从表现形式上看,关键字和标识符的形式相近,可以将关键字理解为标识符的一组特例,比如 if 就是关键字,而 sqrt 就是标识符。因此,我将能够构成关键字和标识符的字符定义为A类字符,当然A类字符不仅包括英文字母,还包含所有汉字、其他少数民族文字、以及希腊字母、拉丁字母等。可见,构成A类字符的集合相当庞大。
除了A类字符之外的所有字符,都归为B类字符。B类字符将是构成数字常量、操作符、界符这三类单词的成分,能构成B类字符的集合规模不大。
单词中的字符串常量是一个特例,不论A类字符还是B类字符,都可以是字符串常量的组成部分。其实,程序中的注释常常是字符串常量的应用方式。
字符分类视图
图中不仅表述了A类与B类字符的细分,同时给出了字符分类编码,该编码将成为字符元素类定义中的字符分类值。
其中,不可见界符字符是单字节字符,取值区间为0~32;数字字符也是单字节字符,取值区间为48~57;这两个区间,不论对GB18030还是对UTF-8都是适用的。
B类字符表
除上述两个区间之外的B类字符,都是通过文件“B类字符表”定义的,B类字符表的内容如下:
<运算字符>→!
<界符字符>→"
<界符字符>→#
<运算字符>→%
<运算字符>→&
<界符字符>→'
<运算字符>→(
<运算字符>→)
<运算字符>→*
<运算字符>→+
<运算字符>→,
<运算字符>→-
<B类通用字符>→.
<运算字符>→/
<界符字符>→:
<界符字符>→;
<运算字符>→<
<运算字符>→=
<运算字符>→>
<运算字符>→?
<运算字符>→[
<运算字符>→]
<运算字符>→^
<界符字符>→{
<运算字符>→|
<界符字符>→}
<运算字符>→~
<界符字符>→‘
<界符字符>→’
<界符字符>→“
<界符字符>→”
<界符字符>→「
<界符字符>→」
<运算字符>→×
<运算字符>→÷
<运算字符>→∧
<运算字符>→∨
<运算字符>→≠
<运算字符>→≤
<运算字符>→≥
<运算字符>→(
<运算字符>→)
<运算字符>→+
<运算字符>→-
<界符字符>→:
<界符字符>→;
<运算字符>→<
<运算字符>→=
<运算字符>→>
<界符字符>→[
<界符字符>→]
<界符字符>→{
<界符字符>→}
<运算字符>→⊕