【发布时间】:2014-11-02 13:43:51
【问题描述】:
这是我的 lex yacc 代码,用于解析 XML 文件并打印和标记之间的内容。
莱克斯
%{
%}
%%
"<XML>" {return XMLSTART;}
"</XML>" {return XMLEND;}
[a-z]+ {yylval=strdup(yytext); return TEXT;}
"<" {yylval=strdup(yytext);return yytext[0];}
">" {yylval=strdup(yytext);return yytext[0];}
"\n" {yylval=strdup(yytext);return yytext[0];}
. {}
%%
YACC
%{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define YYSTYPE char *
%}
%token XMLSTART
%token XMLEND
%token TEXT
%%
program : XMLSTART '\n' A '\n' XMLEND {printf("%s",$3);
}
A : '<' TEXT '>' '\n' A '\n' '<' TEXT '>' { $$ = strcat($1,strcat($2,strcat($3,strcat($4,strcat($5,strcat($6,strcat($7,strcat($8,$9))))))));}
| TEXT
%%
#include"lex.yy.c"
我收到语法错误,尝试在某些地方使用 ECHO,但没有找到错误。 我正在使用的输入文件是:
<XML>
<hello>
hi
<hello>
</XML>
请帮我找出错误。我使用 lex 和 yacc 的经验相对较少
【问题讨论】:
-
查看我的语法。您必须指的是 hello 的结束标记。但我的语法将结束标签视为