使用flex将HTML转为txt

早睡早起身体好1121 2021-03-20 02:42:24
编译原理课程作业,实在不会,发出来求助
需要利用flex将html文件转为txt文件
要求是:
(1)删除html的所有html标签,并将转换后的文件直接输出到屏幕上.
(2)删除所有的开始标记为<script...>, <style...>和<form...>
结束标记为</script>,</style>和</form>中间的所有内容
(3) 提出所有的锚中的超链,并将其保存在新建的文本文件hyplink.txt中

/* like NONEED, SCPT and FORM, 请完成TAG, LINK条件模式下对应
正则表达式和对应的C语言动作 */

html2txt.l如下:

%{
#include <stdio.h>
#include <string.h>
FILE *hyplink;
int lastchar; /* if last output char is newline */
%}
%x NONEED
%x FORM
%x LINK
%x SCPT
%x TAG
%x COMMENT
%%
("<"[sS][cC][rR][iI][pP][tT][^>]*">") BEGIN(SCPT);
("<"[sS][tT][yY][lL][eE][^>]*">") BEGIN(NONEED);
"<"[iI][fF][rR][aA][mM][eE][^>]*">" BEGIN(NONEED);
("<!--"[sS][cC][rR][iI][pP][tT][^>]*">") BEGIN(SCPT);
("<"[Ff][oO][rR][Mm][^>]*">") BEGIN(FORM);

"<"[aA] BEGIN(LINK);
"<" BEGIN(TAG);

<NONEED>"</"[sS][tT][yY][lL][eE][^>]*">" BEGIN(INITIAL);
<NONEED>"</"[iI][fF][rR][aA][mM][eE][^>]*">" BEGIN(INITIAL);
<NONEED>.|\n ;


<SCPT>"/"[sS][cC][rR][iI][pP][tT][^>]*">"+(\n)* BEGIN(INITIAL);
<SCPT>.|\n {; }

<FORM>("</"[Ff][oO][rR][Mm][^>]*">"+(\n)*) BEGIN(INITIAL);
<FORM>.|\n { ;

/* like NONEED, SCPT and FORM, 请完成TAG, LINK条件模式下对应
正则表达式和对应的C语言动作 */
}
(&[qQ][oO][tT]";") {
printf("'");
}
(&[gG][tT]";") {
printf(">");
}
(&[lL][tT]";") {
printf("<");
}
(&[aA][mM][pP]";") {
printf("&");
}
(&[nN][bB][sS][pP]";") {
printf(" ");
}

[\r\t]* {; }
("</"[lL][iI]">") {; }
("</"[pP]">") {; }
("-->") {; }




%%

int main(int argc, char **argv )
{
++argv, --argc;
if ( argc > 0 ) {
if ((yyin = fopen( argv[0], "rb" )) == NULL) {
printf("the file %s could'nt open!\n", argv[0]);
exit (1);
}
}
else
yyin = stdin;
if ((hyplink = fopen("hyplink.txt", "w")) == NULL) {
printf("coud'nt create hyperlink file!\n");
exit(1);
}
yylex();
fclose(yyin);
fclose(hyplink);
return 0;
}

int yywrap()
{
return 1;
}
...全文
8 点赞 收藏 回复
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复

还没有回复,快来抢沙发~

相关推荐
发帖
其它技术问题
创建于2007-09-28

3843

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2021-03-20 02:42
社区公告
暂无公告