实验一  词法分析实验

专业:商业软件三班   姓名:曾铭杰  学号:201506110197

一、        实验目的

用C语言设计一个词法分析程序,将字符流的源程序进行分析,从左到右逐个字符地扫描源程序,同时滤掉空格符和回车换行符,逐个读取字符,然后将它们拼在一起组成一个有意义的单词符号,识别出单词的种别及单词自身的值.

二、        实验内容和要求

1.输入一段源程序字符串;

2.输出格式按照二元组(种别,单词符号本身)。

三、        实验方法、步骤及结果测试

  1. 1.      源程序名:压缩包文件(rarzip)中源程序名:词法分析.c

可执行程序名:词法分析.exe

  1. 2.      原理分析及流程图

通过读取用户输入字符串,滤掉空格符合回车换行符,如果单词以字母开头则为标识符,再让标志符与关键字数组比较,存在与之相同元素即为关键字,否则则进入switch语句,与运算符,分隔符等有意义符号进行比较即可。

  1. 3.      主要程序段及其解释:
do{ scaner(); switch(type) { case 11: printf("   %-10d%5d\n",sum,type); break; case -1: printf("有无法识别的字符\n");   return 0; break;      default:  printf("   %-10s%5d \n",word,type); break; } }while(type!=0);

do while 循环语句中有scaner函数,scaner函数是对用户输入的字符串进行处理,滤掉空格和回车换行符读取有意义的单词,并对单词进行分析,判断起种别,根据返回值的情况进行分类,如果返回值type为11,则证明该单词为数字,如果为-1则表示无法识别,其他值则表示该单词为标识符或关键字或运算符等。对一个单词进行判断后继续循环,知道scaner返回值type为0,即为用户输入的字符串结束符'#为止。

scanner函数部分程序段如下所示:

if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))) {
while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) { word[i++]=ch; ch=string[p++]; }p--;type=10;                     //先将以字母开头的字符识别为标识符for(n=0;n<6;n++) if(strcmp(word,keyword[n])==0)    //与关键字数组比较,相同则表示为关键字,种别码即为下标值加1{  type=n+1; break; } }                                  else if((ch>='0')&&(ch<='9')) {  while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0';    //将字符型转化为整形sumch=string[p++]; } p--; type=11; } 

  1. 4.      运行结果及分析

四、        实验总结

刚开始进行词法分析程序编写时候毫无头绪,虽然知道其原理和要求,但是不知道从何入手,在通过网上查询资料后才有所头绪,实验过程也遇到很多问题。

由于程序需要返回单词符号和种别码给用户查看,而函数只能有一个返回值,所以返回的参数需设为全局变量,以便调用和查询。其次是在关键字数组的设定上,本程序中keyword数据存储关键字,数组的下标值+1即表示该关键字的种别码,在程序开始时就已初始化好的了。在程序运行时,如果计算机读取到已字母开头的单词时,会暂时将它识别为标识符,再将标识符与关键字数组进行比较,相同时即为关键字,种别码即为下标值+1。

转载于:https://www.cnblogs.com/Ming-jay/p/5955629.html

词法分析实验报告(一)相关推荐

  1. 语法分析器c语言实验报告,词法分析实验报告(C++)..doc

    词法分析实验报告(C). 词法分析实验报告 一.实验目的 1. 掌握词法分析的原理. 2. 熟悉保留字表等相关的数据结构与单词的分类方法. 3. 掌握词法分析器的设计与调试. 二.实验内容 根据编译中 ...

  2. 编译原理:词法分析实验报告

    词法分析实验报告 文章目录 词法分析实验报告 一.实验目的 二.实验原理 三.实验要求 四.实验步骤(利用Java语言来进行词法分析) ① 待分析的语言词法 ② 单词符号对应的种别码 ③ 词法分析程序 ...

  3. 201506110135陈若倩词法分析实验报告

    实验一.词法分析实验 商业软件工程专业   陈若倩  201506110135 一. 实验目的 通过设计一个词法分析程序,对词法进行分析,加强对词法的理解,掌握对程序设计语言的分解和理解. 二. 实验 ...

  4. c语言词法分析程序实验报告,实验一词法分析程序设计与实现

    实验一 词法分析程序设计与实现 一.实验目的: 加深对词法分析器的工作过程的理解:加强对词法分析方法的掌握:能够采用一种编程语言实现简单的词法分析程序:能够使用自己编写的分析程序对简单的程序段进行词法 ...

  5. 编译原理实验报告一:PL0语言编译器分析(PL0,词法分析,语法分析,中间代码生成)

    实验报告一:PL0语言编译器分析 一.实验目的 通过阅读与解析一个实际编译器(PL/0语言编译器)的源代码, 加深对编译阶段(包括词法分析.语法分析.语义分析.中间代码生成等)和编译系统软件结构的理解 ...

  6. 编译原理实验报告三:语法分析(PL0,词法分析,语法分析,中间代码生成)

    实验报告三:语法分析 一.实验目的 通过设计.开发一个S语言的语法分析程序,实现对源程序的语法检查和结构分析,加深对相关课堂教学内容的理解,提高语法分析方法的实践能力. 二.实验要求        根 ...

  7. 实验一 词法分析java,java词法分析器实验报告

    java词法分析器实验报告 Java 词法分析器实验报告 --07111101 --奥特曼 一.词法分析器功能概述: 1. 使用DFA实现词法分析器的设计: 2. 实现对Java 源程序中注释和空格( ...

  8. 编译原理实验报告:词法分析

    NCWU慎用 1.实验要求 (1)从源程序文件中读取有效字符流并将其分析识别单词符号,转换成二元组内部表示形式输出. (2)可视化方式展示词法分析识别过程或者词法分析器工作原理(选做). (3)实验时 ...

  9. 《编译原理》实验报告——TINY语言的词法分析

    TINY语言的词法分析 实验目的 (评价依据,描述是否准确到位) 构造tiny语言的词法分析器(扫描器),要求利用第三方的lex工具进行构造. 构造出的扫描器,能够读入教材样例中给出的tiny语言的示 ...

最新文章

  1. SQL 的Over 子句
  2. 配置高可用的Hadoop平台
  3. c语言吧百度贴吧经典100例,C语言程序设计经典100例
  4. Flink分布式standalone部署方式(第二种方式)
  5. 优化混合云性能:数据管理技巧大公开
  6. cocos2d-x初探学习笔记(2)--重要概念及Test例子结构
  7. 启动outlook时报错:mapi无法加载信息服务msncon.dll
  8. python 去除nan inf_Python实现半自动评分卡建模(附代码)
  9. expected an indented block
  10. 计算机学院迎新活动总结,大学迎新活动总结
  11. 九大背包问题专题--二维费用的背包问题
  12. 标准报表乱码出现??符号
  13. ora-600[6002]解决
  14. 徐小湛概率论与数理统计课件_考研数学 徐小湛教授线性代数90讲
  15. speedoffice表格如何冻结窗格?
  16. BIOS知识枝桠——简称释义(按名称排序)
  17. esxcli software vib 命令为 ESXi 5.x/6.x 主机安装补丁程序 (2008939)
  18. 2015年全国大学生电子设计竞赛专题系列之综合测评-Multisim使用技巧
  19. 经典密码学与现代密码学
  20. openlayers3中geowebcache的使用

热门文章

  1. Super VLAN
  2. 很多绿化软件运行都会提示缺少msvcp71.dll、msvcr100.dll、msvcr71.dll等msvc**.dll文件错误解决方法
  3. eleTree树形插件引入
  4. C#下拉列表绑定数据库的使用三层实现
  5. Centos运行Mysql因为内存不足进程被杀
  6. 针对ASP.NET MVC的SEO优化笔记
  7. SGU 201 Non Absorbing DFA (DP)
  8. x86伺服器 走向虛擬化
  9. Python中的字符串定义
  10. 如何用anaconda创建python项目_PyCharm+cmd中使用Anaconda 与 新建Python环境(Windows)