编译原理——语法分析器(C/C++代码实现)

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

编译原理——语法分析器(C/C++代码实现)

0 🐣实验目的

编写一个简单的LL(1)语法分析器。(注意:此实验是简化版的LL(1)文法,已给出预测分析表,不需要求FIRST和FOLLOW集,直接根据预测分析表编写程序即可)

1 🐣实验要求

根据编译原理理论课中学习的算术表达式文法,以及该文法LL(1)分析表,用C语言编写接受算术表达式为输入的语法分析器,以控制台(或文本文件,也可以结合词法分析器完成)为输入,控制台(或文件)输出产生式序列形式的分析结果。

2 🐣实验内容

实现LL(1)语法分析器。执行过程举例:分析id+id*id,根据PPT上的预测分析表,输入id+id*id#,分析出栈和输出的内容。
文法如下:

E→TE' E' →+TE' |ε T→FT'
T' →*FT' |ε F→(E)|id
编译原理——语法分析器(C/C++代码实现)

3 🐣实验思路

  1. 首先明确LL(1)语法分析器的大致结构,然后设计各个模块结构。

  1. 定义常量(比如预测分析表的行变量个数,列变量个数),变量(主函数用到的循环变量等等),数据结构(比如存储符号的分析栈以及临时使用的临时栈)

  1. 定义两个一维数组,一个用于存储终结符号,一个用于存储语法变量,再定义一个二维数组用于存储预测分析表。

  1. 我将输出栈内字符和输出输入缓冲区内剩余字符分别定义为了两个函数,这样更方便我进行调用输出。

  1. 主函数是整个程序的重要部分,主要是LL(1)文法的算法实现:即根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作:大致过程是先将初始的符号压入分析栈内,紧接着进入循环,循环测试即为缓冲区内串长度,然后取出栈顶看是否输入缓冲区的符号匹配,不匹配判断栈弹出的符号是否与行变量匹配,匹配就记住行变量,不匹配就报错,接着判断输入缓冲区第一个字符是否与列变量匹配,如果匹配,记住此时列变量,然后与预测分析表进行比对,分析此时情况,直到循环结束,最后得出结论,输出最后的分析结果。文章来源地址https://www.toymoban.com/news/detail-425878.html


4 🐣实验代码


5 🐣实验结果

编译原理——语法分析器(C/C++代码实现)
编译原理——语法分析器(C/C++代码实现)

6 🐣实验总结

此实验写的并不是太好,应该不能满足大部分的实验要求,需要自己改一下。

7 🐣实验程序以及实验报告下载链接

编译原理实验:包括实验一词法分析器,实验二进制分析,实验三语法分析器,实验四SLR语法分析器等其中含有实验报告,实验代码等等-C++文档类资源-CSDN文库

编译原理——语法分析器(C/C++代码实现)

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

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

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

相关文章

  • 【编译原理】 实验一:词法分析器的自动实现(Lex词法分析)

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

    2024年02月08日
    浏览(36)
  • 编译原理———词法分析器

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

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

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

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

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

    2024年04月08日
    浏览(31)
  • 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日
    浏览(32)
  • 词法分析器的设计与实现

    1.1、实验目的         加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。 1.2、实验要求         1)对单词的构词规则有明确的定义;      

    2024年02月13日
    浏览(43)
  • Unity2022里用ViusalStudio2019创建代码报错CS8032 C# 无法从 {1}: {2} 创建分析器实例 {0}。

    用Unity2022在vs2019里创建脚本时遇到了CS8032 问题 首先在Assets文件下创建一个名为CS8032WarningFixer的脚本   在脚本里输入这些代码  using System.Linq; using System.Xml.Linq; using UnityEditor; public class CS8032WarningFixer : AssetPostprocessor {     private static string OnGeneratedCSProject(string path, string content

    2024年02月16日
    浏览(57)
  • 【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数02

    随着人工智能技术的不断发展,阿里体育等IT大厂,推出的“乐动力”、“天天跳绳”AI运动APP,让 云上运动会、线上运动会、健身打卡、AI体育指导 等概念空前火热。那么,能否将这些在APP成功应用的场景搬上小程序,分享这些概念的红利呢?本系列文章就带您一步一步从

    2024年02月13日
    浏览(32)
  • 【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01

    随着人工智能技术的不断发展,阿里体育等IT大厂,推出的“乐动力”、“天天跳绳”AI运动APP,让 云上运动会、线上运动会、健身打卡、AI体育指导 等概念空前火热。那么,能否将这些在APP成功应用的场景搬上小程序,分享这些概念的红利呢?本系列文章就带您一步一步从

    2024年02月09日
    浏览(32)
  • 词法分析器(c++)

    个人觉得单纯是用来完成实验报告的话还行,但仅做参考,因为本人的编程水平有限,怕误人子弟。 本次代码支持以下操作: 单行注释 多行注释 文件形式输入 种别码可以在文件中自由修改 单词字符串识别支持: 部分(可手动在程序外部---reference.txt文件添加,),

    2024年02月04日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包