parsing - 我可以让野牛使 yytname 在外部可见吗?
问题描述
处理我的语法时,Bison 在标签名称表中生成,例如
static const char *const yytname[] =
{
"$end", "error", "$undefined", "TAG", "SCORE",
...
}
static
关键字对代码的yytname
其他部分不可见。
这通常是无害的,但我想格式化我自己的语法错误消息,而不是依赖于提供给我的yyerror
函数的错误消息。
我的 makefile 包含以下规则:
chess1.tab.c: chess.tab.c
sed '/^static const.*yytname/s/static//' $? > $@
This works, but it's not what I'd call elegant.
有没有更好的方法来获取标签名称表?
解决方案
您可以使用添加到解析器文件的函数导出表:
%token-table
%code provides {
const char* const* get_yytname(void);
}
...
%%
...
%%
const char* const* get_yytname(void) { return yytname; }
您可能还想重新导出一些相关的常量。
或者,您可以编写一个接受令牌编号并返回令牌名称的函数。这可以更好地进行封装;字符串表的存在及其精确类型是实现细节。
推荐阅读
- php - WooCommerce 不同语言的评论/评论
- javascript - 在 React 中将页面的背景颜色(可以随时更改)调整为按钮的背景颜色
- vertica - 需要vertica中的所需日期格式
- c++ - 如何在 gmock 模拟方法中处理参数
- itk - 如何获取ITK中节点的物理坐标 :: Mesh from a 3D volume of ct images
- python - 从数据框中提取列并使用正则表达式创建新列
- python - 我有一个字符串为“11-2020”,我想在 Python 中将其转换为“NOV-2020”
- php - Laravel 通知未定义变量:用户
- twitter-bootstrap - 如何根据引导网格列的奇数和偶数添加行数
- react-native - 键盘避免视图在平面列表页脚中不起作用