编译原理-LL(1)预测分析实验 c源代码

时间:2022-04-07 03:57:02

   编译原理实验--LL(1)预测分析,根据LL(1)文法,写出各文法左部的FIRST集 FOLLOW集 SELECT集.然后根据SELECT集 写出预测分析表.本程序是在SELECT集建立后,程序根据预测分析表进行分析.

 

编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码/** */ /**
编译原理-LL(1)预测分析实验 c源代码*@Create:      2006-11-21
编译原理-LL(1)预测分析实验 c源代码*@Description: LL(1) forcast Analyse
编译原理-LL(1)预测分析实验 c源代码*@Author:      oDon
编译原理-LL(1)预测分析实验 c源代码*@Corporation: xxxxxxx CO.
编译原理-LL(1)预测分析实验 c源代码*@Copyright:   yuanonline@hotmail.com  --oDon--
编译原理-LL(1)预测分析实验 c源代码
编译原理-LL(1)预测分析实验 c源代码               0       1        2       3        4         5         6        7   
编译原理-LL(1)预测分析实验 c源代码---------------------------------------table---------------------------------------
编译原理-LL(1)预测分析实验 c源代码|        |    I    |    +   |   -    |   *   |    /     |    (    |    )   |    #    |
编译原理-LL(1)预测分析实验 c源代码------------------------------------------------------------------------------------
编译原理-LL(1)预测分析实验 c源代码|  E         ->TG                                          ->TG                                      |
编译原理-LL(1)预测分析实验 c源代码------------------------------------------------------------------------------------
编译原理-LL(1)预测分析实验 c源代码|  G                 ->+TG    ->-TG                                   ->~     ->~  |
编译原理-LL(1)预测分析实验 c源代码------------------------------------------------------------------------------------
编译原理-LL(1)预测分析实验 c源代码|  T       ->FS                                            ->FS                     |
编译原理-LL(1)预测分析实验 c源代码------------------------------------------------------------------------------------
编译原理-LL(1)预测分析实验 c源代码|  S                  ->~        ->~     *FS      /FS                ->~      ->~  |
编译原理-LL(1)预测分析实验 c源代码------------------------------------------------------------------------------------
编译原理-LL(1)预测分析实验 c源代码|  F         ->i                                              ->(E)                |
编译原理-LL(1)预测分析实验 c源代码-----------------------------------------------------------------------------------
编译原理-LL(1)预测分析实验 c源代码
*/

编译原理-LL(1)预测分析实验 c源代码#include 
" stdio.h "
编译原理-LL(1)预测分析实验 c源代码#define SIZE 
20
编译原理-LL(1)预测分析实验 c源代码#define EMPTY 
14
编译原理-LL(1)预测分析实验 c源代码#define TABLE_SIZE 
5
编译原理-LL(1)预测分析实验 c源代码
编译原理-LL(1)预测分析实验 c源代码typedef struct table
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码
... {
编译原理-LL(1)预测分析实验 c源代码        
char head;
编译原理-LL(1)预测分析实验 c源代码        
char  pre[8][4]; 
编译原理-LL(1)预测分析实验 c源代码}
table;
编译原理-LL(1)预测分析实验 c源代码
编译原理-LL(1)预测分析实验 c源代码
char  ExpressionStr[SIZE];                        // Inputed Analysed Expression
编译原理-LL(1)预测分析实验 c源代码
char  AnalysisStack[SIZE];                        // Analysis Stack
编译原理-LL(1)预测分析实验 c源代码
unsigned  char  analysis_Index;                    //
编译原理-LL(1)预测分析实验 c源代码
unsigned  char  analy_Index;                       // Current TOP_Index of Expression
编译原理-LL(1)预测分析实验 c源代码
unsigned  char  exp_Index;                         // Current Bottom_Index of Expression
编译原理-LL(1)预测分析实验 c源代码
unsigned  char  step;
编译原理-LL(1)预测分析实验 c源代码table tb[TABLE_SIZE];                                               
// forcast table---------------
编译原理-LL(1)预测分析实验 c源代码

编译原理-LL(1)预测分析实验 c源代码
编译原理-LL(1)预测分析实验 c源代码
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码
/** */ /***************************************
编译原理-LL(1)预测分析实验 c源代码 @name:       InitTable
编译原理-LL(1)预测分析实验 c源代码 @Describe:   Initlize the forcast table
编译原理-LL(1)预测分析实验 c源代码 @Param:      void
编译原理-LL(1)预测分析实验 c源代码 @Return:     void
编译原理-LL(1)预测分析实验 c源代码 ****************************************
*/

编译原理-LL(1)预测分析实验 c源代码
void  InitTable()
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码
... {
编译原理-LL(1)预测分析实验 c源代码     
// table E
编译原理-LL(1)预测分析实验 c源代码
     tb[0].head = 'E';
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
0].pre[0], "GT");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
0].pre[5], "GT");
编译原理-LL(1)预测分析实验 c源代码     
//table G
编译原理-LL(1)预测分析实验 c源代码
     tb[1].head = 'G';
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
1].pre[1], "GT+");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
1].pre[2], "GT-");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
1].pre[6], "~");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
1].pre[7], "~");
编译原理-LL(1)预测分析实验 c源代码     
//table T
编译原理-LL(1)预测分析实验 c源代码
     tb[2].head = 'T';
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
2].pre[0], "SF");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
2].pre[5], "SF");
编译原理-LL(1)预测分析实验 c源代码     
//table S
编译原理-LL(1)预测分析实验 c源代码
     tb[3].head = 'S';
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
3].pre[1], "~");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
3].pre[2], "~");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
3].pre[3], "SF*");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
3].pre[4], "SF/");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
3].pre[6], "~");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
3].pre[7], "~");
编译原理-LL(1)预测分析实验 c源代码     
//table F
编译原理-LL(1)预测分析实验 c源代码
     tb[4].head = 'F';
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
4].pre[0], "i");
编译原理-LL(1)预测分析实验 c源代码     strcpy(tb[
4].pre[5], ")E(");
编译原理-LL(1)预测分析实验 c源代码}

编译原理-LL(1)预测分析实验 c源代码
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码
/** */ /***************************************
编译原理-LL(1)预测分析实验 c源代码 @name:       PrintGenerate
编译原理-LL(1)预测分析实验 c源代码 @Describe:   Printing Generate expression
编译原理-LL(1)预测分析实验 c源代码 @Param:      void
编译原理-LL(1)预测分析实验 c源代码 @Return:     void
编译原理-LL(1)预测分析实验 c源代码 ****************************************
*/

编译原理-LL(1)预测分析实验 c源代码 
void  PrintGenerate( char   * ch)
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码 
... {
编译原理-LL(1)预测分析实验 c源代码      
int i = 0;
编译原理-LL(1)预测分析实验 c源代码      
for(i = strlen(ch) - 1; i >= 0; i--)
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码      
...{
编译原理-LL(1)预测分析实验 c源代码            printf(
"%c",ch[i]);
编译原理-LL(1)预测分析实验 c源代码      }

编译原理-LL(1)预测分析实验 c源代码      printf(
" ");
编译原理-LL(1)预测分析实验 c源代码      
编译原理-LL(1)预测分析实验 c源代码 }

编译原理-LL(1)预测分析实验 c源代码
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码
/** */ /*******************************************
编译原理-LL(1)预测分析实验 c源代码*@name:        Trace
编译原理-LL(1)预测分析实验 c源代码*@Description: Format output
编译原理-LL(1)预测分析实验 c源代码*@Param:       void
编译原理-LL(1)预测分析实验 c源代码*@Return:      void
编译原理-LL(1)预测分析实验 c源代码*******************************************
*/

编译原理-LL(1)预测分析实验 c源代码
void  Trace()
编译原理-LL(1)预测分析实验 c源代码编译原理-LL(1)预测分析实验 c源代码
... {
编译原理-LL(1)预测分析实验 c源代码     
int i = 0;
编译原理-LL(1)预测分析实验 c源代码     
int j = 0;
编译原理-LL(1)预测分析实验 c源代码     printf(
" ");
编译原理-LL(1)预测分析实验 c源代码     printf(
"%d  ",step++);
编译原理-LL(1)预测分析实验 c源代码     
while(AnalysisStack[i] != '