我的 C 文件中有一个字符串,如下所示:
char *test = "print x";
我想用我编写的 Bison 解析器来解析它。是否可以?
Bison 解析器根本不读取输入。他们只是通过重复调用来获取一系列令牌yylex
。 (或者,使用现代野牛,您可以创建一个“推送解析器”,它在连续调用中给出标记。)所以无论实现什么yylex
负责输入。
如果你使用flex
要创建词法扫描器,您可以使用yy_scan_string
(or yy_scan_bytes
如果您知道字符串有多长)扫描字符串而不是从文件中扫描。请参阅柔性手册有关这些功能的详细信息。
举一个简单的例子,您可以将以下两个函数放在您的flex
定义文件,在第二个之后%%
:
void set_input_string(const char* in) {
yy_scan_string(in);
}
void end_lexical_scan(void) {
yy_delete_buffer(YY_CURRENT_BUFFER);
}
并将其放在野牛定义文件的末尾,再次放在第二个之后%%
:
/* Declarations */
void set_input_string(const char* in);
void end_lexical_scan(void);
/* This function parses a string */
int parse_string(const char* in) {
set_input_string(in);
int rv = yyparse();
end_lexical_scan();
return rv;
}
然后你可以声明并使用parse_string
解析字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)