大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个问题涉及到词法份分析和语法分析,会比较复杂,如果有其他更好的实现,建议用其他更好的实现,比如手动地将源文件中的函数编入一个列表等等。如果真要分析一个.c源文件的函数,可以从以下几个方面设计:
成都创新互联公司专注于江干企业网站建设,响应式网站开发,成都商城网站开发。江干网站建设公司,为江干等地区提供建站服务。全流程按需求定制制作,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
用getcher()逐个字符读入并分析
统计花括号即{}的层次,从0层开始,遇到'{'层级加1,遇到'}'层级减1,函数定义和变量定义只会在最外层也就是第0层
函数定义通常有如下的形式(正则表达式)
/^[a-zA-Z_][a-zA-Z0-9_]?\s[a-zA-Z_][a-zA-Z0-9_]?(\s)? \( [a-zA-Z0-9_,/s]? \)
?代表0次或多次 \s表示任何形式空格,用正则表达式工具很易于实现。在最外层运用正则表达式工具或者手工编写识别器很容易识别。
但是这种识别只能适用于直接定义的函数,并且不能辨识和区分通过宏定义定义的函数以及调用宏的语句,且即使识别出了函数以及函数的签名,也不能通过c语言调用该函数。
严重怀疑你输入的是中文的刮号,你可以在switch前直接把*ch赋值为'('来试试,或者把你输入的用%d格式输出看看asc码值是不是等于'('.
/* */ 主要是字符匹配的问题,检索 / 和 * ,如果检索到 * 和 / ,哨兵变量为 1 ,否则为 0 ;
//主要是检索到 / 和 / 就可以,以后这一行都是注释了。
头一个注释可以应用于 printf 中,后者不可以。
---------------------
以上均是个人理解,如有错误,请高手指正。