编译原理实验二 语法分析

更新时间:2023-05-25 06:53:44 阅读: 评论:0

编译原理实验二  语法分析
输入:token[40]
tokenstring[40][30]
输出:检查是否符合文法];
生成语法树。
样例程序已经对符合以下文法的源程序进行语法分析但不能生成抽象语法树。
要求写出能生成抽象语法树的语法分析程序。
maximum是什么意思文法:  stmt_q stmt_q  ;  assign_stmt  |  assign_stmt
        assign_stmt id := exp
        expexp + term | exp – term | term
        termterm * factor | term / factor | factor
prefer是什么意思        factor ( exp ) |  id  |  num
语法树的数据结构:
typedef enum {stmtk,expk} nodekind;
typedef enum {ifk,assignk,declk} stmtkind;
typedef enum {opk,constk,idk} expkind;
typedef struct treenode
  { struct treenode * child[3];
    struct treenode * sibling;
    nodekind nodek;
    union { stmtkind stmt; expkind exp;} kind;
turnaround    union { tokentype op;
            int val;
            char * name; } attr;
  } treenode;
样例程序
#include<stdio.h>
#include<ctype.h>
typedef enum {PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI,ASSIGN,NUM,ID,DOLLAR} tokentype;/*记号*/
tokentype token[]={ID,ASSIGN,NUM,PLUS,NUM,TIMES,NUM,SEMI,ID,ASSIGN,NUM,DOLLAR};  /*存记号*/
char      tokenstring[][30]={"ab",":=","12","+","5","*","3",";","xy",":=","34","$"};/*存记号串*/熬更守夜
int wordindex=0;  /*以上两个数组的索引*/
factor();
term();
exp();
assign_stmt();
stmt_q();
main()
{ stmt_q();
}
stmt_q()
{assign_stmt();
while( (token[wordindex]==SEMI)&& (token[wordindex]!=DOLLAR))
  {wordindex++;
  assign_stmt();
  }
小语种就业
白萝卜英文}
assign_stmt()
{if(token[wordindex]==ID)
  wordindex++;
el {printf("error");
      exit(1);}
if(token[wordindex]==ASSIGN)
        wordindex++;
el {printf("error");
      exit(1);}
exp();
}
exp()
{term();
while((token[wordindex]==PLUS)||(token[wordindex]==MINUS))
  {wordindex++;
    term();}
}
term()
{factor();
while((token[wordindex]==TIMES)||(token[wordindex]==OVER))
  {wordindex++;
    factor();}
}
factor()
{switch(token[wordindex]){
  ca LPAREN :
    wordindex++;
    exp();
    if(token[wordindex]==RPAREN)
      wordindex++;
    el {printf("error");
          exit(1);}
    break;
  ca NUM :
sar是什么意思    wordindex++;学生厌学怎么办
    break;
  ca ID :
    wordindex++;
    break;
  default:
    printf("error");
jane doe  }
teradata}

本文发布于:2023-05-25 06:53:44,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/121791.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语法   符合   生成   文法   抽象   编译   语种
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图