编译原理实验--LL(1)预测分析,根据LL(1)文法,写出各文法左部的FIRST集 FOLLOW集 SELECT集.然后根据SELECT集 写出预测分析表.本程序是在SELECT集建立后,程序根据预测分析表进行分析.
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
/** */
/**
*@Create: 2006-11-21
*@Description: LL(1) forcast Analyse
*@Author: oDon
*@Corporation: xxxxxxx CO.
*@Copyright: yuanonline@hotmail.com --oDon--
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzAvOC8yLzUvNTMvNmE5YzA3MWEwOGYxZGFlMmQzZTFjNTEyMDAwZWVmNDEuanBl.jpe?w=700&webp=1)
0 1 2 3 4 5 6 7
---------------------------------------table---------------------------------------
| | I | + | - | * | / | ( | ) | # |
------------------------------------------------------------------------------------
| E ->TG ->TG |
------------------------------------------------------------------------------------
| G ->+TG ->-TG ->~ ->~ |
------------------------------------------------------------------------------------
| T ->FS ->FS |
------------------------------------------------------------------------------------
| S ->~ ->~ *FS /FS ->~ ->~ |
------------------------------------------------------------------------------------
| F ->i ->(E) |
-----------------------------------------------------------------------------------
*/
#include
"
stdio.h
"
#define SIZE
20
#define EMPTY
14
#define TABLE_SIZE
5
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
typedef struct table
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
...
{
char head;
char pre[8][4];
}
table;
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
char
ExpressionStr[SIZE];
//
Inputed Analysed Expression
char
AnalysisStack[SIZE];
//
Analysis Stack
unsigned
char
analysis_Index;
//
unsigned
char
analy_Index;
//
Current TOP_Index of Expression
unsigned
char
exp_Index;
//
Current Bottom_Index of Expression
unsigned
char
step;
table tb[TABLE_SIZE];
//
forcast table---------------
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
/** */
/***************************************
@name: InitTable
@Describe: Initlize the forcast table
@Param: void
@Return: void
*****************************************/
void
InitTable()
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
...
{
// table E
tb[0].head = 'E';
strcpy(tb[0].pre[0], "GT");
strcpy(tb[0].pre[5], "GT");
//table G
tb[1].head = 'G';
strcpy(tb[1].pre[1], "GT+");
strcpy(tb[1].pre[2], "GT-");
strcpy(tb[1].pre[6], "~");
strcpy(tb[1].pre[7], "~");
//table T
tb[2].head = 'T';
strcpy(tb[2].pre[0], "SF");
strcpy(tb[2].pre[5], "SF");
//table S
tb[3].head = 'S';
strcpy(tb[3].pre[1], "~");
strcpy(tb[3].pre[2], "~");
strcpy(tb[3].pre[3], "SF*");
strcpy(tb[3].pre[4], "SF/");
strcpy(tb[3].pre[6], "~");
strcpy(tb[3].pre[7], "~");
//table F
tb[4].head = 'F';
strcpy(tb[4].pre[0], "i");
strcpy(tb[4].pre[5], ")E(");
}
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
/** */
/***************************************
@name: PrintGenerate
@Describe: Printing Generate expression
@Param: void
@Return: void
*****************************************/
void
PrintGenerate(
char
*
ch)
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
...
{
int i = 0;
for(i = strlen(ch) - 1; i >= 0; i--)
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzkvMi81LzUvMTgvMzdjOGJmNjhjZGMzY2M4MTc1OWMzNDE2MDc3NmJjNTMuanBl.jpe?w=700&webp=1)
...{
printf("%c",ch[i]);
}
printf(" ");
}
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
/** */
/*******************************************
*@name: Trace
*@Description: Format output
*@Param: void
*@Return: void
********************************************/
void
Trace()
![编译原理-LL(1)预测分析实验 c源代码 编译原理-LL(1)预测分析实验 c源代码](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzEvMy8zLzIvMzAvYTQxOTU0YTI3ZDZhZDk2ZmEyYzJjZjgxNmU2Nzc0NDguanBl.jpe?w=700&webp=1)
...
{
int i = 0;
int j = 0;
printf(" ");
printf("%d ",step++);
while(AnalysisStack[i] != '