码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于C++实现简易语法分析程序


    1. 问题描述

    编写语法分析程序,实现对算术表达式的语法分析。要求所分析算术表达式由如下的文法产生:

    在这里插入图片描述

    要求在对输入的算术表达式进行分析的过程中,依次输出所采用的的产生式。

    2. LL(1)文法

    对原文法消除左递归,结果如下:

    在这里插入图片描述

    实现思路:实现求解 FIRST 集、FOLLOW 集的函数 getFirst()、getFollow(),读取文法产生式,根据构造的 FIRST 集、FOLLOW 集实现构造分析表的函数 generateTable()。最后,读入待分析的字符串,实现 splitTerminal()函数将其分解为终结符的形式(主要将数字转换为 num),通过 analyse()函数,借助栈对终结符序列进行分析。

    3. LR 文法

    对原文法进行拓展文法,结果如下:

    在这里插入图片描述

    根据文法画出 LR(1),并合并得到 LALR(1),且无冲突,项目集 DFA 如下:

    在这里插入图片描述

    由图可得分析表如下:

    ACTIONACTIONACTIONACTIONACTIONACTIONACTIONACTIONGOTOGOTOGOTOGOTO
    $()+-*/numE’ETF
    0S4S5123
    1ACCS6S7
    2R3R3R3R3S8S9
    3R6R6R6R6R6R6
    4S4S51023
    5R8R8R8R8R8R8
    6S4S5113
    7S4S5123
    8S4S513
    9S4S514
    10S15S6S7
    11R1R1R1R1S8S9
    12R2R2R2R2S8S9
    13R4R4R4R4R4R4
    14R5R5R5R5R5R5
    15R7R7R7R7R7R7

    实现思路:将分析表内容通过 generateTable()函数导入。读入待分析的字符串,实现 splitTerminal()函数将其分解为终结符的形式(主要将数字转换为 num),通过 analyse()函数,借助栈(状态栈、符号栈)对终结符序列进行分析。

    4. 测试情况

    • 分析字符串:(1+1)/2+3*(4-4)

    在这里插入图片描述
    在这里插入图片描述

    • 分析字符串:1.2E3+4.56*(77.889/0.001-2)

    在这里插入图片描述
    在这里插入图片描述

    • 分析错误串:1-2*(3+)

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    湖南软件测评公司简析:软件功能测试和非功能测试的联系和区别
    第三话、程序员第一家公司有多重要
    linux 上安装tomcat ,并将tomcat注册为服务
    大数据接私活200元,做个简易的HDFS浏览器(一)
    第2关:还原键盘输入(list)
    【响应式编程】Schedulers之线程池共用问题
    java基础新
    JavaSE——异常处理机制
    第一章、Spring基础
    著名书法家傅成洪在香港第八届“一带一路”高峰论坛上展示艺术与合作的融合
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/126316541
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号