如何使用Bison解析C字符串 [英] How to parse a C string with Bison

查看:0
本文介绍了如何使用Bison解析C字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

char *test = "print x";

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

推荐答案

Bison解析器根本不读取输入。它们只是通过重复调用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来解析字符串。

这篇关于如何使用Bison解析C字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆