如何用两个新标记替换词法分析器标记?
在 XML 中,空元素可以用以下任一方式表示:
<foo></foo>
<foo/>
如果输入包含后者,那么我想像前者一样对其进行标记。
也就是说,如果输入是
那么我希望词法分析器生成这个 (token kind, token value)
对序列:
('<', '<')
("foo", STAG)
('>', '>')
("</foo>", ETAG)
我尝试了这个(其中
是独占状态,st
是保存元素名称的全局变量,在本例中为 "foo"
) :
<START_TAG>{
"/>" { yytext = ">";
return(">");
yytext = strcat(strcat("<", st), ">");
yyval.strval = strdup(yytext);
yy_pop_state();
return(ETAG);
}
}
但它不起作用。
本质上,我希望词法分析器用以下两个标记替换此标记 "/>"
:">"
和 "".我该怎么做?
In XML an empty element can be represented in either of these ways:
<foo></foo>
<foo/>
If the input contains the latter, then I want to tokenize it like the former.
That is, if the input is <foo/>
then I want the lexer to generate this sequence of (token kind, token value)
pairs:
('<', '<')
("foo", STAG)
('>', '>')
("</foo>", ETAG)
I tried this (where <START_TAG>
is an exclusive state and st
is a global variable holding the element name, which is "foo"
in this example):
<START_TAG>{
"/>" { yytext = ">";
return(">");
yytext = strcat(strcat("<", st), ">");
yyval.strval = strdup(yytext);
yy_pop_state();
return(ETAG);
}
}
but it doesn't work.
Essentially I want the lexer to replace this token "/>"
with these two tokens: ">"
and "</foo>"
. How do I do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在返回语句
return(">");
之后,您不会执行任何其他操作。另外,用
yytext = ">";
更改内部变量yytext
从来都不是一个好主意。首先strdup(yytext)
,然后在新指针中更改您需要的任何内容。After the returning statement
return(">");
you don't execute anything else.Also, changing the internal variable
yytext
withyytext = ">";
is never a good idea. Firststrdup(yytext)
and then change anything you need in the new pointer.