正在加载图片...
"#"[1t]*"include” BEGIN INCLUDE:/进入INCLUDE状态 yylval.clear0:/∥需要将所有的Include 值初始化 return INCLUDE:/∥返回INCLUDE标记 <INCLUDE >[\< BEGIN_INCLUDE_FILE;/进入 INCLUDE_FILE状态 return *yytext:/∥返回引号或者尖括号 <INCLUDE FILE_>[\>]*( yylval.headerfile+=yytext:/记录头文 件字符串 return HEADERFILE://返回头文件标i记 <_INCLUDE_FILE_>[\>]{ BEGIN INITIAL:/∥恢复到初始状态,默认 状态 return *yytext:/∥返回引号或者尖括号 \t\n] :/∥对于额外的空白都不处理直接扔掉 int yywrap(void) return l:/∥只处理一个输入文件 3.Yacc文件 #include <iostream> #include "main.hpp" #define YYDEBUG0/将这个变量设置为I则表示启动Yacc的调试功能 extern "C void yyerror(const char *s) extern int yylex(void): std:vector<Include>g_Includes;/用来记录所有的包含声明 Include g_pInclude;/用来保存新增的包含声明信,息的指针 %token INCLUDE %% "#"[ \t]*"include" { BEGIN _INCLUDE_;// 进入_INCLUDE_状态 yylval.clear();// 需要将所有的Include 值初始化 return INCLUDE;// 返回INCLUDE标记 } <_INCLUDE_>[\"|<] { BEGIN _INCLUDE_FILE_;// 进入 _INCLUDE_FILE_状态 return *yytext; // 返回引号或者尖括号 } <_INCLUDE_FILE_>[^\">]* { yylval.headerfile+=yytext;// 记录头文 件字符串 return HEADERFILE;// 返回头文件标记 } <_INCLUDE_FILE_>[\"|>] { BEGIN INITIAL;// 恢复到初始状态,默认 状态 return *yytext;// 返回引号或者尖括号 } [ \t\n] ;// 对于额外的空白都不处理直接扔掉 %% int yywrap(void) { return 1;// 只处理一个输入文件 } 3. Yacc 文件 %{ #include <iostream> #include "main.hpp" #define YYDEBUG 0 // 将这个变量设置为 1 则表示启动Yacc的调试功能 extern "C"{ void yyerror(const char *s); extern int yylex(void); } std::vector<Include> g_Includes;// 用来记录所有的包含声明 Include *g_pInclude;// 用来保存新增的包含声明信息的指针 %} %token INCLUDE
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有