【编译原理】词法分析程序设计(C语言)

这篇具有很好参考价值的文章主要介绍了【编译原理】词法分析程序设计(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验内容

  给定下表所示的一个简单语言的词法规则描述完成以下任务:
(1)画出识别该语言词法规则的状态转换图
(2)依据状态转换图,设计并编制词法分析程序,实现从输入源程序中,识别出各类单词,即关键字、标识符、常数、运算符、界符五大类,并输出各个单词的种别码和单词符号自身的值。
(3)设计恰当的测试用例对各类单词的识别进行测试。
【编译原理】词法分析程序设计(C语言),c语言,java,服务器

二、实验原理

1.状态转换图
【编译原理】词法分析程序设计(C语言),c语言,java,服务器

2.词法分析程序的功能
输入: 文法的源程序字符串
输出: 二元组(code,input)构成的序列
   code:单词的种别码
   input:单词符号

3.程序设计思路
(1)首先我们要了解五类单词字符—关键字、标识符、常数、运算符、界符。其中标识符是以字母开头、以字母和数字组成的任意符号串,常数为整数,即以数字组成的符号串。同时,我们也已经知道了单词符号的种别码。
(2)为了判别单词字符的类型,我们可以将整个程序分成五个部分:主函数,核心子程序,判断关键字函数,判断字母函数,判断数字函数。
(3)设一个input数组,接收控制台输入字符流,并送给语法分析程序。同时,设置一个存放关键字key的数组。
c.如果是运算符或者界符,先读取该运算符或者界符,然后再多读一位以确保找到正确的单词符号。
(4)每读取完一种符号就将该符号的种别码返回给主函数,并按照二元组形式输出。输出完毕后还可继续输入字符串,直到输入#结束程序。

4.数据结构
  输入字符串后主函数调用judge(),其中code为种别码,i的值不能超过输入字符串的最大长度,s为输入的字符串;judge()调用isDigit(),isLetter(),isKey()三个判断函数;key数组提前存储好了关键字以便于比较;input数组在judge()中为输入缓冲区,最后作为参数一起返回到主函数中输出,每调用一次judge()其缓冲区就清零以便存储新的单词符号。

int isDigit();   //判断是否为数字的函数
int isLetter();  //判断是否为字母的函数
int isKey();   //判断是否为关键字
void judge(int& code, int& i, char s[]); //核心子程序
char key[8][10] = {
    "void", "main", "int", "char", "if", "else","for","while" }; //存储关键字
char input[100]; //输入缓冲区

三、结果分析

1.测试用例
  输入if(a>=0) sum+=1 ,第一行输出(种别码,单词符号),第二行输出关键字“if”的种别码105和自己本身的符号,第三行输出界符“(”的种别码301和自己本身的符号,往下依次完成了该输入字符串的识别。
【编译原理】词法分析程序设计(C语言),c语言,java,服务器
  再输入else b=3,还可继续识别。直到输入“#”结束程序。
【编译原理】词法分析程序设计(C语言),c语言,java,服务器文章来源地址https://www.toymoban.com/news/detail-558164.html

四、源代码

/*-----------词法分析核心程序 -----------*/
void judge(int& code, unsigned int& i, char s[])
{
   
    int temp = 0;  //清空缓冲区以便存储新的单词字符
    if (s[i] == 

到了这里,关于【编译原理】词法分析程序设计(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编译原理———词法分析器

    设计并实现一个包含预处理功能的词法分析程序,加深对编译中词法分析过程的理解。 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。其中,  syn为单词种别码。  Token为存放的单词自身字符串。  Sum为整型常量。 具体实现时,可以将单词的二

    2024年02月08日
    浏览(26)
  • 【编译原理】 实验一:词法分析器的自动实现(Lex词法分析)

    相关代码实操移步视频 https://www.bilibili.com/video/BV13x4y1o7FL 1.借助词法分析工具Flex或Lex完成(参考网络资源) 2.输入:高级语言源代码(如helloworld.c) 3.输出:以二元组表示的单词符号序列。 通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握

    2024年02月08日
    浏览(23)
  • 编译原理词法分析器(C/C++)

            词法分析器不用多说,一开始我还不知道是什么样的,看了下别人的博客,再看看书,原来是输出二元组,这不就是字符串操作嘛。然后细看几篇博客,发现大都是用暴力判断来写的。我对代码重复性比较高的方法不太感冒,不是说我编程有多好,就是单纯的不喜欢

    2024年02月06日
    浏览(25)
  • 编译原理C++单词拼装器&词法分析器实验思路

    本文只涉及功能实现的思路,针对期末复习,不涉及制作操作界面。 实验内容 1. 把C++源代码中的各类单词(记号)进行拼装分类。 C++语言包含了几种类型的单词(记号):标识符,,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等【详细

    2024年04月08日
    浏览(19)
  • HNU-编译原理-实验1-利用FLEX构造C-Minus-f词法分析器

    计科210X 甘晴void 202108010XXX 详细的实验项目文档为 https://gitee.com/coderwym/cminus_compiler-2023-fall/tree/master/Documentations/lab1 学习和掌握词法分析程序的逻辑原理与构造方法。通过 FLEX 进行实践, 构造 C-Minus-f 词法分析器。具体完成过程如下: 学习 C-Minus-f 的词法规则 学习 FLEX 工具使

    2024年01月20日
    浏览(21)
  • [编译原理]DO-WHILE循环语句的翻译程序设计(LR(1)方法、输出四元式)C++实现

    初始条件: ​ 理论:完成编译原理,数据结构、高级编程语言、汇编语言等相关课程的学习,基于计算机专业知识进行课程设计。 ​ 实践:计算机实验室提供计算机及软件环境。如果自己有计算机及环境也可以在其上进行设计任务。 要求完成的主要任务: (包括课程设计工

    2024年02月03日
    浏览(20)
  • 制作一个简单的C语言词法分析程序

    C语言的程序中,有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表,给出对应的识别码,然后跟据对应的表格来写出程序 程序主要有循环判断构成。不需推理即可产生的符号我们可以把它包装在函数中,返回值为对应的识

    2024年02月06日
    浏览(22)
  • 【编译原理】-- 递归下降语法分析设计原理与实现(C语言实现)

    本实验基于词法分析程序实现,可参考本人前面的文章。 目录 一、目标任务 二、程序功能描述 三、主要数据结构描述 四、程序结构描述 设计方法 First集和Follow集 递归子程序框图 函数定义及函数之间的调用关系 五、程序测试 测试用例1 测试结果1 测试用例2 测试结果2 测试

    2023年04月21日
    浏览(22)
  • 【编译原理】【词法分析】【正则表达式】【NFA】【DFA】【C++】正则表达式转DFA&NFA,判断字符串是否符合正则表达式的匹配算法

    显然,正则表达式、NFA、DFA的概念都很简单,所以直接上代码,注释应该解释地比较清楚, 没有万能头文件的自行替换需求库 ,如果有疑问的可以留言。 网盘链接 [自行补全]/s/1pbGT_wpB662TwFrnukXgGQ?pwd=TSIT 提取码:TSIT 原理可以参考这篇博客 传送门 本次程序由四个文件组成 文

    2024年02月11日
    浏览(48)
  • 【软件设计师07】程序设计语言与语言处理程序基础

    编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多中程序语言特点 (逐渐降低考察比例,很少考察) 概念 文法类型 语法推导树 有限自动机 与正规式(重点) 常见问题:给一个串比如01、10、001等,看图中起点到终点能否连起来得到这样的串 正规式 是有限自

    2023年04月08日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包