l任务描述
–分析C语言源程序的片段,判断程序末尾是否为一个函数调用语句。如果是函数调用,则输出被调用函数的原型,并判断程序的末尾正在输出第几个参数。
l输入
–int foo(int a, unsigned char b) {
–  return 0;
–}
–Voidbar() {
–  foo(10,
l输出:
–int foo(int, unsigned char)
–2
说明:
写的不是很好,因为是纯C写的,但是由于想偷个懒所以用了#include<iostream>请各路挑剔的大神原谅!

#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
char *keyword[6]={"int","double","char","float","void","bool"};struct parameter
{char *type[10];  //the type of parametersint no;          //the sum of parameters
};struct function
{char *ftype;   //the type of functionchar *name;    //the name of functionstruct parameter PP;  //each function's parameters list
};//create a table store the function in the Programme
struct function table[20];FILE *fp;
bool Dflag=false;
bool Fflag=false;
bool Tflag=false;   //call f
char word[20];
char fname[25];
char *funcname[20];  //each name of function
char *functype[20];  //each function's type
char *ptype[10];   //the type of parametersint mm=0;  //the ptr of func
int nn=0;  //the ptr of parameters
int funnum=0;  void isFunction(char ch)
{int k=0;//get keywordwhile((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){word[k++]=ch;ch=fgetc(fp);}word[k]='\0';fseek(fp,-1,1);int i;for(i=0;i<6;i++){if(strcmp(word,keyword[i])==0){Dflag=true;   break;}}//get definition nameif(Dflag==true){Dflag=false;ch=fgetc(fp);while(ch==' '){ch=fgetc(fp);}i=0;while(ch!='('){fname[i++]=ch;ch=fgetc(fp);}fname[i]='\0';if(ch=='('){Fflag=true;funnum++;functype[mm]=(char *)malloc(10);memset(functype[mm],0,10);strcpy(functype[mm],word);funcname[mm]=(char *)malloc(25);memset(funcname[mm],0,25);strcpy(funcname[mm],fname);mm++;}else{Fflag=false;}}else{//call fint k;for(k=0;k<funnum;k++){if(strcmp(word,funcname[k])==0){Tflag=true;//output this functioncout<<table[k].ftype<<" "<<table[k].name<<"(";int m=0;for( m=0;m<table[k].PP.no-1;m++){cout<<table[k].PP.type[m]<<",";}cout<<table[k].PP.type[m]<<")"<<endl;cout<<table[k].PP.no<<endl;break;}}}
}
int  parameterScanner()
{char ch=fgetc(fp);int  i=0;char paratype[10];int pnum=0;while(ch!=')'){i=0;while(ch==' '){ch=fgetc(fp);}while(ch!=' '){paratype[i++]=ch;ch=fgetc(fp);}pnum++;paratype[i]='\0';ptype[nn]=(char *)malloc(10);memset(ptype[nn],0,10);strcpy(ptype[nn++],paratype);while( ch!=' ' ){ch=fgetc(fp);}while( ch!=',' ){ch=fgetc(fp);if( ch==')' )break;}if( ch==')' ){return pnum ;}else{ch=fgetc(fp);}}return pnum;
}
int main(int argc,char *argv[])
{char ch;int  i=0;if((fp=fopen("Pro.c","r"))==NULL){cout<<"Can not open the file!"<<endl;exit(1);}else{ch=fgetc(fp);while(ch!=EOF){if(ch=='i'||ch=='d'||ch=='c'||ch=='f'||ch=='v'||ch=='b'){isFunction(ch);if(Fflag=true){Fflag=false;table[mm-1].ftype=(char *)malloc(10);memset(table[mm-1].ftype,0,10);strcpy(table[mm-1].ftype,functype[mm-1]);table[mm-1].name=(char *)malloc(20);memset(table[mm-1].name,0,20);strcpy(table[mm-1].name,funcname[mm-1]);table[mm-1].PP.no=parameterScanner();for(i=0;i<table[mm-1].PP.no;i++){table[mm-1].PP.type[i]=(char *)malloc(20);memset(table[mm-1].PP.type[i],0,20);strcpy(table[mm-1].PP.type[i],ptype[i]);}  }}ch=fgetc(fp);}}system("Pause");return 0;
}

编译原理扫描程序,判断当前输入的程序中程序调用的函数是那个函数原型相关推荐

  1. python编写一个程序、输入一个数判断其是偶数还是奇数_编写一个程序,判断用户输入的整数是偶数还是奇数。 (7.0分)_学小易找答案...

    [其它]已知info=[1,2,3,4,5],请通过两种编程方法,将列表变成info=[5,4,3,2,1] (6.0分) [其它]阅读下面的程序,分析代码是否可以编译通过,如果能编译通过,请列出运行 ...

  2. 通过java程序判断用户输入的是字符串还是整数

    在Java程序中可以使用instanceof关键字判断用户输入的是字符串还是整数.可以将用户输入的值存储在一个Object类型的变量中,然后使用instanceof关键字检查该变量是否是String类 ...

  3. 编写一个python程序判断用户输入的8位银行卡_用Python编写的程序,提示用户输入一个由7位数字组成的帐号?...

    我在上一门Python入门课程,但有点困在作业上.任何建议或资源将不胜感激!在 问题是: 用Python编写一个程序,提示用户输入由7位数字组成的帐号.在 从用户处获取该帐号后,验证该帐号是否有效.您 ...

  4. 最全!最完整的求first集和follow的代码!!!编译原理 FIRST集和FOLLOW集的求法 代码,程序,实验报告

    DEV C++ 项目实现 不会建项目的看这个-->如何创建项目 代码链接:https://pan.baidu.com/s/1VNdrSMXaKu3HI0UQ_TInUQ 提取码:b1qz 使用教 ...

  5. c语言判断字符串中是否包含非数字,【新手】【求思路】如何判断用户输入的字符串中是否含有非数字?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include int main() { int a=0; float b,c; printf("考拉兹在 1930 年提出 ...

  6. 字符串过滤非数字c语言,【新手】【求思路】如何判断用户输入的字符串中是否含有非数字?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include int main() { int a=0; float b,c; printf("考拉兹在 1930 年提出 ...

  7. 对计算机课程设计的认识,编译原理课程设计心得体会范文

    经过一个星期的编译原理课程设计,本人在刘贞老师的指导下,顺利完成该课程设计.通过该课程设计,收获颇多. 一.对实验原理有更深的理解 通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶 ...

  8. 计算机编译原理有必要学吗,计算机程序编译原理学习心得

    计算机程序编译原理学习心得 <编译原理>是计算机专业的一门重要课程,正如教材:第一章的引论所述,"编译程序是现代计算机系统的基本组成部分之一"."一个编译程序 ...

  9. 编译原理:LL(1)语法分析器的实现(内含代码详细注释)

     自顶向下语法分析器的设计与实现 目录 一.说明 二.程序功能及运行截图 功能 运行截图 三.算法逻辑和程序流程图 定义的主要变量或存储结构 (1)消除直接左递归 (2)求FIRST集合 (3)求FO ...

最新文章

  1. 人工智能论坛_诚邀共享 | 2020人工智能医疗产业前瞻论坛
  2. 【iCore3 双核心板】例程二十一:LAN_TCPS实验——以太网数据传输
  3. 比较有意思的比较内表的小函数
  4. 【Python】感觉是全网最详细Pandas合并数据集操作总结
  5. mysql多线程查询_MySQL 利用多线程提升查询性能的一种思路
  6. IDEA建立Spring MVC Hello World 详细入门教程
  7. c语言float二进制输出代码_C语言学习笔记——学前知识概述
  8. 服务器屏蔽非法app请求
  9. MQTT 遗嘱消息(Will Message)的使用
  10. Web前端和后端开发的区别和要求
  11. vscode 新版eslint自动修复_程序员请收好:10 个实用的 VS Code 插件
  12. 机构借贷平台 Maple 将上线以太坊主网并开启流动性挖矿
  13. JS实现新打开网页最大化or全屏显示
  14. 面试字节跳动社招,我工资涨了60%,附带面经
  15. 计算机一级基础知识理论,计算机一级考试理论试题 第6部分 信息与计算机基础知识...
  16. RHEL常用Linux命令操作 第四章实验报告
  17. 微信红包封面催生暴利灰产:有人月入三十万
  18. Day2-Python基础2---列表、元组操作
  19. 2021年全国职业院校技能大赛大数据应用技术国赛题
  20. 【算法】最长公共子序列(LCS)

热门文章

  1. 惊了,老板要我开发一个工作流引擎!
  2. 最牛逼的核心框架,没有之一!
  3. 面试官让我讲讲Unicode,我讲了3秒说没了,面试官说你可真菜
  4. 7个IntelliJ IDEA必备插件,让写代码像火箭一样飞起!
  5. 管理者如何管理好有一个团队?
  6. Excel数据拆分-分列
  7. physx选择显卡还是cpu_工控机如何选购cpu,工控机cpu选择盒装好还是散装好
  8. 建立循环单链表(尾插法)
  9. html点击屏幕向右移动,HTML – 一旦打开,如何使移动页面适合屏幕?
  10. python3.6小程序_python3.6小程序