语法分析是编译过程的核心部分,其基本任务是根据语言的语法规则进行语法分析,如果不存在语法错误即给出正确的语法结果,并为语义分析和代码生成做准备。

语法分析器的两种方式

语法分析器的任务主要是确定是否可以以及如何从语法的起始符号推导出输入符号串(输入文本),主要可以通过两种方式完成:

1. 自顶向下分析
根据形式语法规则,在语法分析树的自顶向下展开中搜索输入符号串可能的最左推导。单词按从左到右的顺序依次使用。

2. 自底向上分析
语法分析器从现有的输入符号串开始,尝试将其根据给定的形式语法规则进行改写,最终改写为语法的起始符号。

一、文法G 设计"+ *"检查

二、理论基础

  1. 掌握自上而下语法分析的要求与特点。
  2. 掌握递归下降语法分析的基本原理和方法。
  3. 掌握相应数据结构的设计方法。

三、代码实现

#include<stdio.h>
#include<string.h>
char Token[30];//存储输入的字符
char sym;//记录下一个字符
char s;//输入字符的传递
static int p=0 ;//下一个字符的下标
void S();
void T();
void U();
void scaner();//下一个字符
void error();//错误结束
int main()
{int i=-1;printf("Please input (end with '#'):\n");do{scanf("%c",&s);i++;Token[i]=s;}while(Token[i]!='#');scaner();S();if(sym=='#')printf("Success!\n");elseprintf("fail!\n");return 0;
}void scaner()
{sym=Token[p];p++;
}
void error()
{printf("error!");
}
void S()
{if(sym=='a'||sym=='^')//如果是a或者是^scaner();else if(sym=='('){scaner();T();if(sym==')')scaner();elseerror();}
}
void T()
{S();U();
}void U()
{if(sym=='+' || sym=='*' ){scaner();S();U();}else if(sym!=')')error();
}

四、实验结果

测试用例: ((a+a)*a)#

Ending!!!

编译原理之简单语法分析器(c语言)相关推荐

  1. 编译原理实验-LL1语法分析器(自动生成First集、Follow集求法)java实现

    编译原理实验-LL1语法分析器(自动生成First.Follow)java 博主在做实验时,参考众多他人代码,发现bug众多,在@moni_mm代码基础上,与伙伴把能看到的BUG都做出修正,同时增添了 ...

  2. 编译原理LR(1)语法分析器 C++实现

    LR(1)语法分析器 C++语言编写,已通过VS2019调试 文章目录 LR(1)语法分析器 一.测试结果 二.测试文件 三.核心代码 四.完整代码 感谢阅读! 如有错误,恳请指正! 一.测试结果 二 ...

  3. 【编译原理】词法分析器语法分析器

    简单编译器设计 采用Java语言对C++语言进行编译,具体的简单编译器设计 词法分析器-扫描器的设计与实现 基本符号表 状态转换图 代码实现 import java.io.*; import java ...

  4. 编译原理 LL(1)语法分析器的设计与实现

    实验内容 针对SysY语言中简单算术表达式文法G[E]: E→TE' E'→ATE'|ε T→FT' T'→MFT' |ε F→(E) | i A → + | - M → * | / 求解相应的FIR ...

  5. 【编译原理】LR语法分析器的设计与实现

    LR语法分析器的设计与实现 本文为当时编译原理实验作业,要求用设计的思想完成,小题大做,仅供参考 文章目录 LR语法分析器的设计与实现 实验要求 实现功能 输入输出 样例 一.LR语法分析器问题定义 ...

  6. 编译原理 实验2 语法分析器的构造

    [实验目的] 练习构造语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解:提高词法分析方法的实践能力 [实验要求] 利用某一高级程序设计语言构造语法分析程序 [具体要求]对于给定的文法 ...

  7. 编译原理-5-LL(1)语法分析器

    LL(1)语法分析器 1. 什么是LL(1)语法分析器 自顶向下的.递归下降的.预测分析的.适用于LL(1)文法的LL(1)语法分析器 自顶向下构建语法分析树 根节点是文法的起始符号SSS 每个中间节 ...

  8. 编译原理简单语法分析器(first,follow,分析表)源码下载

    编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...

  9. 编译原理视角下的 c c 语言左值教学,西安交通大学18年3月课程考试《编译原理》作业考核试题...

    Q.微信均是1219895388,Q:1219895388 联系:QQ:576696131 西安交通大学18年3月课程考试<编译原理>作业考核试题 共题,总分:100分 答题中 分 一.单 ...

最新文章

  1. Java爬虫模拟登录——不给我毛概二的H某大学
  2. Leetcode题目:Rectangle Area
  3. [译]解密 Uber 数据科学团队路径选择算法的优化之路
  4. 闪灯什么意思_开车碰见别人闪灯知道是什么意思吗?看不懂不要说自己会开车哦...
  5. Qt Creator查找和更换
  6. Linux常用命令拾遗
  7. Android 应用开发(17)---应用权限
  8. python是什么内容
  9. java中创建对象的方式有哪些,Java中创建对象的四种方式
  10. 【特征提取】基于matlab熵函数语音端点检测【含Matlab源码 1764期】
  11. 才子进销存软件各版本说明
  12. postgresql立式版本下载_【PostgreSQL下载】PostgreSQL官方版下载_多特软件站
  13. 如何用Java读取单元格的数据_Java读取Excel中的单元格数据
  14. Unity连接Photon
  15. 风靡全球25年的重磅IP,新作沦为脚本乐园
  16. Git分支的创建,切换及分支指针移动的理解
  17. 【方法篇·壹】css开发技巧-全局样式设置和局部样式
  18. 实验吧-证明自己吧(超详细)
  19. VB.net:使用Visual Studio 2010中的VB.net语言工具箱DataGridView调用SQL数据库Database的表格文件
  20. CEST日期格式转换为 年月日时分秒

热门文章

  1. U1C2 文本预处理
  2. 球幕投影中内投球和外投球的区别
  3. 使用 arxiv-sanity 实时跟进自己研究领域的Paper
  4. linux内存回收(一)---kswapd回收
  5. Glide的使用回收内存问题
  6. http报文格式简介
  7. c汇编语言例题,第三章 汇编语言程序设计例题习题
  8. writeup 攻防世界 Decrypt-the-Message
  9. 服务器安装macos虚拟机,windows服务器装macos虚拟机系统
  10. AD7606的国产替代方案—ADCS8162