词法分析的前奏:字符分析(十一)字符分类

在前面的字符元素类定义中,字符分类函数一直都是空函数,现在,要回过头把这个坑给填上了。

字符分类的设想

字符分类的根本目的是为词法分析做准备,是为词法分析服务的。而在类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类通用字符>.
<运算字符>/
<界符字符>:
<界符字符>;
<运算字符><
<运算字符>=
<运算字符>>
<运算字符>→?
<运算字符>[
<运算字符>]
<运算字符>^
<界符字符>{
<运算字符>|
<界符字符>}
<运算字符>~
<界符字符>→‘
<界符字符>→’
<界符字符>→“
<界符字符>→”
<界符字符>→「
<界符字符>→」
<运算字符>→×
<运算字符>→÷
<运算字符>→∧
<运算字符>→∨
<运算字符>→≠
<运算字符>→≤
<运算字符>→≥
<运算字符>→(
<运算字符>→)
<运算字符>→+
<运算字符>→-
<界符字符>→:
<界符字符>→;
<运算字符>→<
<运算字符>→=
<运算字符>→>
<界符字符>→[
<界符字符>→]
<界符字符>→{
<界符字符>→}
<运算字符>→⊕
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值