如何用Bison解析C字符串

时间:2016-08-24 21:49:33

标签: c bison

我在C文件中有一个字符串,如下所示:

char *test = "print x";

我想用我写过的Bison解析器来解析它。有可能吗?

1 个答案:

答案 0 :(得分:1)

野牛解析器根本不读取输入。他们只是通过反复调用yylex来获得一系列代币。 (或者,使用现代野牛,你可以创建一个“推送解析器”,在连续调用中给出令牌。)所以无论实现yylex是什么,都要负责输入。

如果您使用flex创建词汇扫描程序,则可以使用yy_scan_string(或yy_scan_bytes如果知道字符串有多长时间)来扫描字符串而不是扫描字符串文件。有关这些功能的详细信息,请参阅Flex manual

举一个简单的例子,您可以在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来解析字符串。