对python的应用还是不熟练,很多实用的方法没掌握,下面的程序本来是用C写的,为了练习一下python,又用python改写的,很粗糙,有bug,不过能运行出结果,嘿嘿,以后学好了python再来优化吧

# -*- coding: cp936 -*-
Keyword = ("begin","end","if","while","var","procedure","else","for","do","int","read","write")
Yunsuanfu = ('+','-','*','/','<','>','%','=')
Fenjiefu = (',',';','(',')','{','}',':')
Kongbai = (' ','\t','\n')
Number = ('0','1','2','3','4','5','6','7','8','9')

test="var a=10;\nvar b,c;\nprocedure p; \n\tbegin\n\t\tc=a+b\n\tend\n"
print test
length=len(test)

for i in range(length):
    if test[i] in Kongbai:
        continue
    if test[i] in Fenjiefu:
        print "分界符\t",test[i]
        continue
    if test[i] in Yunsuanfu:
        print "运算符\t",test[i]
        continue
    if test[i-1] in Number:
        continue
    if test[i] in Number:
        print "数字\t",
        while test[i] in Number:
            print test[i],
            i+=1
        print ''
    if test[i-1] in Number or (test[i-1]>='a' and test[i-1]<='z'):
        continue
    j=0
    temp = ""
    while True:
        if test[i] in Kongbai or test[i] in Yunsuanfu or test[i] in Fenjiefu:
            break
        else:
            j+=1
        i+=1
    temp = test[i-j:i]    
    if temp in Keyword:
        print "关键字\t",temp
    else:
        print "标识符\t",temp

2012年3月21日 22:43:52改写的代码:

1 # -*- coding: cp936 -*-
 2 Keyword = ("begin","end","if","while","var","procedure","else","for","do","int","read","write")
 3 Yunsuanfu = ('+','-','*','/','<','>','%','=')
 4 Fenjiefu = (',',';','(',')','{','}',':')
 5 Kongbai = (' ','\t','\n')
 6 
 7 test="var a=10;\nvar b,c;\nprocedure p; \n\tbegin\n\t\tc=a+b\n\tend\n"
 8 print test
 9 length=len(test)
10 i=-1
11 while i < length:
12     i+=1
13     if test[i] in Kongbai:
14         continue
15     if test[i] in Fenjiefu:
16         print "分界符\t",test[i]
17         continue
18     if test[i] in Yunsuanfu:
19         print "运算符\t",test[i]
20         continue
21     if test[i].isdigit():
22         print "数字\t",
23         while test[i].isdigit():
24             print test[i],
25             i+=1
26         print ''
27         i-=1
28         continue
29     j=0
30     temp = ""
31     while True:
32         if test[i] in Kongbai or test[i] in Yunsuanfu or test[i] in Fenjiefu:
33             break
34         else:
35             j+=1
36         i+=1
37     temp = test[i-j:i]    
38     if temp in Keyword:
39         print "关键字\t",temp
40     else:
41         print "标识符\t",temp

42     i-=1


博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/

对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com


本文转自ma6174博客园博客,原文链接:http://www.cnblogs.com/ma6174/archive/2012/03/20/2407383.html,如需转载请自行联系原作者

编译原理----词法分析程序----python语言版相关推荐

  1. 编译原理--词法分析器(python语言实现)

    词法分析器 最近在学习编译原理.由于实验要求有词法分析器,这里我就先记录一下词法分析器实现过程以及具体思路. 目标语言 此处我选择的目标语言是c语言的子集来进行词法分析. 实现语言 此处我选用的语言是 ...

  2. 编译原理pl/0 c语言版 pl0.h文件

    #include <stdio.h> # define norw 13 /*关键字个数*/ # define txmax 100 /*名字表容量*/ # define nmax 14 /* ...

  3. 编译原理上机实习c语言小子集编译程序的实现报告,合肥工业大学编译原理实验报告(完整代码版)...

    <合肥工业大学编译原理实验报告(完整代码版)>由会员分享,可在线阅读,更多相关<合肥工业大学编译原理实验报告(完整代码版)(58页珍藏版)>请在人人文库网上搜索. 1.计算机与 ...

  4. 中山大学编译原理实验——实现PL0语言的编译程序(无坑有缩进版)

    PL0-Compiler 代码传送门 ps:吐槽一下,老师给的代码实在是太烂了.又没缩进又多编译错误,除此之外还有很多细节漏掉关键字,总之就很多坑,所以这里发一个无坑带缩进版,方便大家学习. 中山大学 ...

  5. 编译原理大作业-PL0语言编译器

    编译原理大作业-PL0语言编译器 一.实验目的 二.源码说明 1.头文件pl0.h (1 词法分析主要数据结构(通过enum symbol类实现) 1.保留字(13+4个): 2.运算符及界符(16+ ...

  6. 编译原理课程作业-Cminus语言的词法及语法分析器实现

    Cminus Compiler 编译原理课程作业-Cminus语言的词法及语法分析器实现 设计思想 词法分析 使用确定有限态自动机(DFA)实现与Lex自动分析两种方式实现. 语法分析 使用递归下降方 ...

  7. 编译原理词法分析程序设计

    编译原理词法分析程序设计 1.   课程设计目的: 结合讲授内容,设计与实现一个简单词法分析器,通过设计编制调试一个具体的词法分析程序,加深对词法分析程序的功能及实现方法的理解.并掌握在对程序设计语言 ...

  8. c语言实现编译器编译原理,编译原理课程设计--C语言编译器实现.doc

    编译原理课程设计--C语言编译器实现 甘肃政法学院 编译原理课程设计 题 目 C语言编译器实现 计算机科学学院计算机科学与技术专业10 级 计本 班 学 号: 201081010137 姓 名: 杨青 ...

  9. c++实现编译原理词法分析实验(含代码)

    c++实现编译原理词法分析实验(含代码) 一.实验目的: 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解.并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法. ...

最新文章

  1. 设计模式 — 创建型模式 — 建造者模式
  2. docker 部署nginx
  3. mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法
  4. MyBatis开发步骤
  5. *p++,(*p)++,*++p,++*p有什么不同
  6. bitcount java_Java.math.BigInteger.bitCount()方法实例
  7. 2017 4月25日下午
  8. spring boot 教程(一) 构建我的第一个Spring boot
  9. glog学习(二):glog主要接口和类分析
  10. C#代码整洁之道:代码重构与性能提升
  11. 潮流计算 matlab,用matlab进行潮流计算
  12. Windows软件之——RocketDock之无法拖放图标到dock栏
  13. anaconda查看环境中安装的包及具体位置查找
  14. 【基于微信的物品回收小程序的设计与实现】
  15. 一份来自于全球的前端面试题清单,看看老外喜欢考哪些题(部分有答案)
  16. python不支持下标访问元素吗_Python 集合不支持使用下标访问其中的元素
  17. Android 7.0 ----- Direct Boot模式(AppClock)
  18. 指标类数据标准如何定义?
  19. 数字化车间数字孪生在线3d地图数据可视化定制
  20. 封装 继承 多态理解

热门文章

  1. 转:flex [Inspectable]标签详解
  2. ScaleGestureDetector使用注意事项
  3. Ajax 文件上传之PHP心得
  4. JSP调用request方法获取请求相关信息
  5. 服务器的虚拟化配置,怎么配置服务器的虚拟化环境
  6. python相比于excel的优势_对照Excel使用Python进行数据分析,更快掌握
  7. iconfont 图标转为字体_App 中使用 Iconfont 的整套方案
  8. oracle dbms_crypto,DBMS_CRYPTO包对Oracle加密
  9. mysql 1786_mysql错误处理之ERROR 1786 (HY000)
  10. Linux 学会看日志文件处理问题