词法分析的前奏:字符分析(九) 源代码部分三

GB18030字符分析源代码

字符分析之派生类

四字节字符判别器类定义

import sys
sys.path.append("D:\cncc\project\字符分析") #设定自己模块的存储路径
from 全局共享 import 共享消息
from 全局共享 import 共享行列号
from 全局共享 import 字符四元队列
from 全局共享 import 输入文件

from 字符解析通用框架抽象类定义 import 字符解析通用框架抽象类

class 四字节字符判别器类(字符解析通用框架抽象类):
   def __init__(self):
       self.设启动码(16)
       self.第一字节首字节 = 0x81
       self.第一字节尾字节 = 0xFE
       
       self.第二字节首字节 = 0x30
       self.第二字节尾字节 = 0x39
       
       self.第三字节首字节 = 0x81
       self.第三字节尾字节 = 0xFE
       
       self.第四字节首字节 = 0x30
       self.第四字节尾字节 = 0x39

       self.a = False
       self.b = False
       self.c = False
       self.d = False

       
   def 工作函数(self):
       if 字符四元队列.已有字节数() == 4:
           第一字节值 = 字符四元队列.读元素值(0)
           第二字节值 = 字符四元队列.读元素值(1)
           第三字节值 = 字符四元队列.读元素值(2)
           第四字节值 = 字符四元队列.读元素值(3)

           if 第一字节值 >= self.第一字节首字节 and 第一字节值 <= self.第一字节尾字节:
               self.a = True
           else:
               self.a = False

           if 第二字节值 >= self.第二字节首字节 and 第二字节值 <= self.第二字节尾字节:
               self.b = True
           else:
               self.b = False

           if 第三字节值 >= self.第三字节首字节 and 第三字节值 <= self.第三字节尾字节:
               self.c = True
           else:
               self.c = False

           if 第四字节值 >= self.第四字节首字节 and 第四字节值 <= self.第四字节尾字节:
               self.d = True
           else:
               self.d = False

           if self.a and self.b and self.c and self.d :
               共享消息.设定消息值(128)
           else:
               共享消息.设定消息值(32)
           
           
       else :
           共享消息.设定消息值(32)

四字节字符处理器类定义

import sys
sys.path.append("D:\cncc\project\字符分析") #设定自己模块的存储路径
from 全局共享 import 共享消息
from 全局共享 import 共享行列号
from 全局共享 import 字符四元队列
from 全局共享 import 输入文件
from 全局共享 import 字符元素链表
from 全局共享 import 垃圾元素链表

from 字符元素类定义 import 字符元素类
from 字符解析通用框架抽象类定义 import 字符解析通用框架抽象类

class 四字节字符处理器类(字符解析通用框架抽象类):
    def __init__(self):
        self.设启动码(128)


    def 工作函数(self):
        字节1 = 字符四元队列.读元素值(0)
        字节2 = 字符四元队列.读元素值(1)
        字节3 = 字符四元队列.读元素值(2)
        字节4 = 字符四元队列.读元素值(3)

        字符四元队列.弹出四个元素()

        字符元素 = 字符元素类(共享行列号)
        字符元素.追加4字节(字节1,字节2,字节3,字节4)

        字符元素链表.append(字符元素)
        共享消息.设定消息值(2048)

二字节字符判别器类定义

import sys
sys.path.append("D:\cncc\project\字符分析") #设定自己模块的存储路径
from 全局共享 import 共享消息
from 全局共享 import 共享行列号
from 全局共享 import 字符四元队列
from 全局共享 import 输入文件

from 字符解析通用框架抽象类定义 import 字符解析通用框架抽象类

class 二字节字符判别器类(字符解析通用框架抽象类):
    def __init__(self):
        self.设启动码(32)
        self.第一字节首字节 = 0x81
        self.第一字节尾字节 = 0xFE
        
        self.第二字节A首字节 = 0x40
        self.第二字节A尾字节 = 0x7E
        
        self.第二字节B首字节 = 0x80
        self.第二字节B尾字节 = 0xFE
        


        self.a = False
        self.b = False
        self.c = False
        
        
    def 工作函数(self):
        if 字符四元队列.已有字节数() >= 2:
            第一字节值 = 字符四元队列.读元素值(0)
            第二字节值 = 字符四元队列.读元素值(1)
            

            if 第一字节值 >= self.第一字节首字节 and 第一字节值 <= self.第一字节尾字节:
                self.a = True
            else:
                self.a = False

            if 第二字节值 >= self.第二字节A首字节 and 第二字节值 <= self.第二字节A尾字节:
                self.b = True
            else:
                self.b = False

            if 第二字节值 >= self.第二字节B首字节 and 第二字节值 <= self.第二字节B尾字节:
                self.c = True
            else:
                self.c = False

            
            if self.a and ( self.b or self.c ) :
                共享消息.设定消息值(256)
            else:
                共享消息.设定消息值(64)
            
            
        else :
            共享消息.设定消息值(64)

二字节字符处理器类定义

import sys
sys.path.append("D:\cncc\project\字符分析") #设定自己模块的存储路径
from 全局共享 import 共享消息
from 全局共享 import 共享行列号
from 全局共享 import 字符四元队列
from 全局共享 import 输入文件
from 全局共享 import 字符元素链表
from 全局共享 import 垃圾元素链表

from 字符元素类定义 import 字符元素类
from 字符解析通用框架抽象类定义 import 字符解析通用框架抽象类

class 二字节字符处理器类(字符解析通用框架抽象类):
    def __init__(self):
        self.设启动码(256)


    def 工作函数(self):
        字节1 = 字符四元队列.读元素值(0)
        字节2 = 字符四元队列.读元素值(1)
        

        字符四元队列.弹出二个元素()

        字符元素 = 字符元素类(共享行列号)
        字符元素.追加2字节(字节1,字节2)

        字符元素链表.append(字符元素)
        共享消息.设定消息值(2048)

一字节字符判别器类定义

import sys
sys.path.append("D:\cncc\project\字符分析") #设定自己模块的存储路径
from 全局共享 import 共享消息
from 全局共享 import 共享行列号
from 全局共享 import 字符四元队列
from 全局共享 import 输入文件

from 字符解析通用框架抽象类定义 import 字符解析通用框架抽象类

class 一字节字符判别器类(字符解析通用框架抽象类):
    def __init__(self):
        self.设启动码(64)
        self.第一字节首字节 = 0x00
        self.第一字节尾字节 = 0x7F
       
        self.a = False
        self.b = False
        self.c = False
        
        
    def 工作函数(self):
        if 字符四元队列.已有字节数() >= 1:
            第一字节值 = 字符四元队列.读元素值(0)
            
            if 第一字节值 >= self.第一字节首字节 and 第一字节值 <= self.第一字节尾字节:
                self.a = True
            else:
                self.a = False
                
           
            if self.a  :
                共享消息.设定消息值(512)
            else:
                共享消息.设定消息值(1024)
            
            
        else :
            共享消息.设定消息值(1024)

一字节字符处理器类定义

import sys
sys.path.append("D:\cncc\project\字符分析") #设定自己模块的存储路径
from 全局共享 import 共享消息
from 全局共享 import 共享行列号
from 全局共享 import 字符四元队列
from 全局共享 import 输入文件
from 全局共享 import 字符元素链表
from 全局共享 import 垃圾元素链表

from 字符元素类定义 import 字符元素类
from 字符解析通用框架抽象类定义 import 字符解析通用框架抽象类

class 一字节字符处理器类(字符解析通用框架抽象类):
    def __init__(self):
        self.设启动码(512)


    def 工作函数(self):
        字节1 = 字符四元队列.读元素值(0)
        
        字符四元队列.弹出一个元素()

        字符元素 = 字符元素类(共享行列号)
        字符元素.追加1字节(字节1)

        字符元素链表.append(字符元素)
        共享消息.设定消息值(768)

字符分析函数

字符分析函数源代码

import sys
sys.path.append("D:\cncc\project\字符分析") #设定自己模块的存储路径
from 全局共享 import 共享消息
from 全局共享 import 共享行列号
from 全局共享 import 字符四元队列
from 全局共享 import 输入文件
from 全局共享 import 字符元素链表
from 全局共享 import 垃圾元素链表

from 队列预存器类定义 import 队列预存器类
from 四字节字符判别器类定义 import 四字节字符判别器类
from 二字节字符判别器类定义 import 二字节字符判别器类
from 一字节字符判别器类定义 import 一字节字符判别器类
from 四字节字符处理器类定义 import 四字节字符处理器类
from 二字节字符处理器类定义 import 二字节字符处理器类
from 一字节字符处理器类定义 import 一字节字符处理器类
from 垃圾字节字符处理器类定义 import 垃圾字节字符处理器类
from 换行判别器类定义 import 换行判别器类
from 循环条件判别器类定义 import 循环条件判别器类

def GB18030字符分析函数(输入文件名):
        
    #初始化
    队列预存器 = 队列预存器类()
    四字节字符判别器 = 四字节字符判别器类()
    二字节字符判别器 = 二字节字符判别器类()
    一字节字符判别器 = 一字节字符判别器类()
    四字节字符处理器 = 四字节字符处理器类()
    二字节字符处理器 = 二字节字符处理器类()
    一字节字符处理器 = 一字节字符处理器类()
    垃圾字节字符处理器 = 垃圾字节字符处理器类()
    换行判别器 = 换行判别器类()
    循环条件判别器 = 循环条件判别器类()

    输入文件.打开文件(输入文件名)
    字符元素链表.clear()
    垃圾元素链表.clear()
    字符四元队列.清空队列()
    共享行列号.__init__()
    共享消息.设定消息值(8)

    while 共享消息.读取消息值() != 0 :
        队列预存器.行动()
        四字节字符判别器.行动()
        二字节字符判别器.行动()
        一字节字符判别器.行动()
        四字节字符处理器.行动()
        二字节字符处理器.行动()
        一字节字符处理器.行动()
        垃圾字节字符处理器.行动()
        换行判别器.行动()
        循环条件判别器.行动()

    输入文件.关闭文件()
    print("有效字符数:",len(字符元素链表))
    print("无效字符数:",len(垃圾元素链表))

    s = len(字符元素链表)
    for i in range(s):
        c = 字符元素链表[i]
        r = c.私有行列号.读取行号值()
        l = c.私有行列号.读取列号值()
        g = c.元素值
        print(r,"行",l,"列",",字符元素值 ",g,",字符 ",c.显示字符())

print("示例文件1,字符分析如下:")
GB18030字符分析函数("示例文件1.txt")

示例文件1

整数型:主函数()
{
	屏幕显示(“星辰大海”);
}

字符分析函数运行结果

示例文件1,字符分析如下:
有效字符数: 33
无效字符数: 0
11,字符元素值  [213, 251] ,字符  整
12,字符元素值  [202, 253] ,字符  数
13,字符元素值  [208, 205] ,字符  型
14,字符元素值  [163, 186] ,字符  :
15,字符元素值  [214, 247] ,字符  主
16,字符元素值  [186, 175] ,字符  函
17,字符元素值  [202, 253] ,字符  数
18,字符元素值  [163, 168] ,字符  (
19,字符元素值  [163, 169] ,字符  )
110,字符元素值  [13] ,字符  

111,字符元素值  [10] ,字符  

21,字符元素值  [123] ,字符  {
22,字符元素值  [13] ,字符  

23,字符元素值  [10] ,字符  

31,字符元素值  [9] ,字符  	
32,字符元素值  [198, 193] ,字符  屏
33,字符元素值  [196, 187] ,字符  幕
34,字符元素值  [207, 212] ,字符  显
35,字符元素值  [202, 190] ,字符  示
36,字符元素值  [163, 168] ,字符  (
37,字符元素值  [161, 176] ,字符  “
38,字符元素值  [208, 199] ,字符  星
39,字符元素值  [179, 189] ,字符  辰
310,字符元素值  [180, 243] ,字符  大
311,字符元素值  [186, 163] ,字符  海
312,字符元素值  [161, 177] ,字符  ”
313,字符元素值  [163, 169] ,字符  )
314,字符元素值  [163, 187] ,字符  ;
315,字符元素值  [13] ,字符  

316,字符元素值  [10] ,字符  

41,字符元素值  [125] ,字符  }
42,字符元素值  [13] ,字符  

43,字符元素值  [10] ,字符  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值