语法分析实验部分简易版

代码是从清华那本编译教材后边实验部分改的
二、实验内容
“简单的算法表达式文法”
〈算术表达式〉∷=〈项〉│〈算术表达式〉+〈项〉│〈算术表达式〉-〈项〉
〈项〉∷=〈因式〉│〈项〉*〈因式〉│〈项〉/〈因式〉
〈因式〉∷=〈变量〉│(〈算术表达式〉)
〈变量〉∷=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
说明:为了简化变量,即简化词法分析程序,此文法中变量的定义就是一个字母。

根据“简单的算法表达式文法”在starter files基础上编写一个递归向下的语法分析程序。
输入:字符串或者文本文件
输出:“合法表达式”或者“非法表达式”
例如:输入a+b*c-b/d则显示或者输出“合法表达式”,输入aa++–c*则显示或者输出“非法表达式”

三、实验分析与设计
S: 算术表达式
B: 项
C: 因式
D: 变量
消除左递归后的文法:
S->BI
I->+BI|-BI|ξ
B->CJ
J->*BI|/BI|ξ
C->D|(S)
D->a|…|z
First(S)={a,…,z,(}
First(I)={+,-, ξ}
First(B)={a,…,z,(}
First(J)={*,/, ξ}
First(C)={a,…,z,(}
First(D)={a,…,z}

Follow(S)={#,)}
Follow(B)={+,-,),#}
Follow(I)={#,)}
Follow(J)={+,-,),#}
Follow(C)={*,/,+,-,),#}
Follow(D)={*,/,+,-,),#}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

/* 符号 */
enum symbol       //枚举类型
{
    nul, end, ident, plus, times, lparen, divide, rparen, sub,
};

#define al 10          //标识符的最大长度
enum symbol sym;    //当前的符号
char ch;              //获取当前字符,getch 使用
char a[al+1];         //当前标识符ident

FILE* fin;            //用于指向输入文件的指针

void getsym();      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值