没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
13页
* 实验三 LL(1)分析表演示程序模板(教学实验用) * * 采用LL(1)表分析法实现表达式文法的语法检验。 * (0)E ->TX * (1)X ->+TX (2)X ->-TX (3)X ->ε * (4)T ->FY * (5)Y ->*FY (6)Y ->/FY (7)Y ->ε * (8)F ->(E) (9)F ->i * 思路:其中i指代数字。先通过词法分析,将实际数字识别 * 用i替代,再进行分析。如 * 3.14*2 => i*i * * ************************************************************/
资源推荐
资源详情
资源评论
/***********************************************************
* 实验三 LL(1)分析表演示程序模板(教学实验用)
*
* 采用LL(1)表分析法实现表达式文法的语法检验。
* (0)E ->TX
* (1)X ->+TX (2)X ->-TX (3)X ->ε
* (4)T ->FY
* (5)Y ->*FY (6)Y ->/FY (7)Y ->ε
* (8)F ->(E) (9)F ->i
* 思路:其中i指代数字。先通过词法分析,将实际数字识别
* 用i替代,再进行分析。如
* 3.14*2 => i*i
*
* 果冻不熟 2012.6.23
* Q群:68229430
************************************************************/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXPROD 10 //产生式候选数目
typedef struct production{
char LeftCode; //产生式左部
char rightCodes[5]; //产生式右部
char allCodes[10]; //产生式
}production;
char stack[200]; //堆栈体
* 实验三 LL(1)分析表演示程序模板(教学实验用)
*
* 采用LL(1)表分析法实现表达式文法的语法检验。
* (0)E ->TX
* (1)X ->+TX (2)X ->-TX (3)X ->ε
* (4)T ->FY
* (5)Y ->*FY (6)Y ->/FY (7)Y ->ε
* (8)F ->(E) (9)F ->i
* 思路:其中i指代数字。先通过词法分析,将实际数字识别
* 用i替代,再进行分析。如
* 3.14*2 => i*i
*
* 果冻不熟 2012.6.23
* Q群:68229430
************************************************************/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXPROD 10 //产生式候选数目
typedef struct production{
char LeftCode; //产生式左部
char rightCodes[5]; //产生式右部
char allCodes[10]; //产生式
}production;
char stack[200]; //堆栈体
char inputstr[100]; //输入串
production prods[MAXPROD]; //产生式集
void init ()
{
prods[0].LeftCode = 'E'; strcpy(prods[0].rightCodes,"TX\0"); strcpy(prods[0].allCodes,"E ->TX\0");
prods[1].LeftCode = 'X'; strcpy(prods[1].rightCodes,"+TX\0"); strcpy(prods[1].allCodes,"X ->+TX\0");
prods[2].LeftCode = 'X'; strcpy(prods[2].rightCodes,"-TX\0"); strcpy(prods[2].allCodes,"X ->-TX\0");
prods[3].LeftCode = 'X'; strcpy(prods[3].rightCodes,"ε\0"); strcpy(prods[3].allCodes,"X ->ε");
prods[4].LeftCode = 'T'; strcpy(prods[4].rightCodes,"FY\0"); strcpy(prods[4].allCodes,"T ->FY\0");
prods[5].LeftCode = 'Y'; strcpy(prods[5].rightCodes,"*FY\0"); strcpy(prods[5].allCodes,"Y ->*FY\0");
prods[6].LeftCode = 'Y'; strcpy(prods[6].rightCodes,"/FY\0"); strcpy(prods[6].allCodes,"Y ->/FY\0");
prods[7].LeftCode = 'Y'; strcpy(prods[7].rightCodes,"ε\0"); strcpy(prods[7].allCodes,"Y ->ε\0");
prods[8].LeftCode = 'F'; strcpy(prods[8].rightCodes,"(E)\0"); strcpy(prods[8].allCodes,"F ->(E)\0");
prods[9].LeftCode = 'F'; strcpy(prods[9].rightCodes,"i\0"); strcpy(prods[9].allCodes,"F ->i\0");
}
//堆栈操作-->产生式倒着存入进栈
int StackPush (int *top, production prod)
{
int len, i;
if ((*top) < 0)
{
printf("\n\n\t\t\t不知道的错误!\n\n");
exit(0);
}
len = strlen(prod.rightCodes);
production prods[MAXPROD]; //产生式集
void init ()
{
prods[0].LeftCode = 'E'; strcpy(prods[0].rightCodes,"TX\0"); strcpy(prods[0].allCodes,"E ->TX\0");
prods[1].LeftCode = 'X'; strcpy(prods[1].rightCodes,"+TX\0"); strcpy(prods[1].allCodes,"X ->+TX\0");
prods[2].LeftCode = 'X'; strcpy(prods[2].rightCodes,"-TX\0"); strcpy(prods[2].allCodes,"X ->-TX\0");
prods[3].LeftCode = 'X'; strcpy(prods[3].rightCodes,"ε\0"); strcpy(prods[3].allCodes,"X ->ε");
prods[4].LeftCode = 'T'; strcpy(prods[4].rightCodes,"FY\0"); strcpy(prods[4].allCodes,"T ->FY\0");
prods[5].LeftCode = 'Y'; strcpy(prods[5].rightCodes,"*FY\0"); strcpy(prods[5].allCodes,"Y ->*FY\0");
prods[6].LeftCode = 'Y'; strcpy(prods[6].rightCodes,"/FY\0"); strcpy(prods[6].allCodes,"Y ->/FY\0");
prods[7].LeftCode = 'Y'; strcpy(prods[7].rightCodes,"ε\0"); strcpy(prods[7].allCodes,"Y ->ε\0");
prods[8].LeftCode = 'F'; strcpy(prods[8].rightCodes,"(E)\0"); strcpy(prods[8].allCodes,"F ->(E)\0");
prods[9].LeftCode = 'F'; strcpy(prods[9].rightCodes,"i\0"); strcpy(prods[9].allCodes,"F ->i\0");
}
//堆栈操作-->产生式倒着存入进栈
int StackPush (int *top, production prod)
{
int len, i;
if ((*top) < 0)
{
printf("\n\n\t\t\t不知道的错误!\n\n");
exit(0);
}
len = strlen(prod.rightCodes);
剩余12页未读,继续阅读
资源评论
- 桃纸夭夭2014-06-10很好的资源,注释很详细
- 冉叙2012-12-29不错的资源,即使代码有点长
备之星光
- 粉丝: 0
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功