Flex/Bison 错误:请求非结构或联合中的成员“str”

2024-01-12

我正在学习 flex/bison。我编写了以下程序但出现错误。

%{
#include <stdio.h>

typedef struct node
{
    struct node *left;
    struct node *right;
    char *token;

}node;

node *mknode( node *left, node *right, char *token);
void printtree(node *tree);

#define YYSTYPE struct node *

%}


%union 
{
    char* str;
    int num;
}


%start  lines
%token <str> WORD 
%token <str> PLUS MINUS TIMES DIVIDE    POWER
%token <str> LEFT_PARENTHESIS RIGHT_PARENTHESIS
%token  <str> END

%left PLUS MINUS
%left TIMES DIVIDE
%right POWER

%type <str> exp term factor line lines
%%

lines:      /* empty */
            | lines line;

line:       exp END                 { printtree($1); printf("\n");}
            ;

exp:        term                    {$$=$1; }
            | exp PLUS term         { $$=mknode($1,$3,"+"); }
            | exp MINUS term        { $$=mknode($1,$3,"-"); }
            ;

term:       factor                  { $$=$1; }
            |term TIMES factor      { $$=mknode($1,$3,"*"); }
            ;

factor:     WORD                    { $$=mknode(0,0, (char*)yylval); }
            |LEFT_PARENTHESIS exp RIGHT_PARENTHESIS 
                                    { $$=$2; }
            ;
%%

int main(void)
{
    return yyparse();
}

node *mknode(node *left, node *right, char *token)
{
  /* malloc the node */
  node *newnode = (node *)malloc(sizeof(node));
  char *newstr = (char *)malloc(strlen(token)+1);
  strcpy(newstr, token);
  newnode->left = left;
  newnode->right = right;
  newnode->token = newstr;
  return(newnode);
}

void printtree(node *tree)
{
  int i;

  if (tree->left || tree->right)
    printf("(");

  printf(" %s ", tree->token);

  if (tree->left)
    printtree(tree->left);
  if (tree->right)
    printtree(tree->right);

  if (tree->left || tree->right)
    printf(")");
}

int yyerror(char *s )
{
    fprintf (stderr, "%s\n", s);
}

flex:

%{

  #include <stdlib.h>
  #include "y.tab.h"

%}

%%

[a-zA-Z0-9]+            { yylval.str = strdup( yytext ); return WORD; }
                        /* cast pointer to int for compiler warning */
[ \t]                   ;
"+"                     return(PLUS);
"-"                     return(MINUS);
"*"                     return(TIMES);
"/"                     return(DIVIDE);
"^"                     return(POWER);
"("                     return(LEFT_PARENTHESIS);
")"                     return(RIGHT_PARENTHESIS);
\n                      return(END);


%%

int yywrap (void) {return 1;}

我收到的错误:

C:\flexbison>recomp example2
example2.y:40.6: warning: empty rule for typed nonterminal, and no action
conflicts: 5 reduce/reduce
example2.y:43: error: request for member `str' in something not a structure or union
example2.y:46: error: request for member `str' in something not a structure or union
example2.y:46: error: request for member `str' in something not a structure or union
example2.y:47: error: request for member `str' in something not a structure or union
example2.y:47: error: request for member `str' in something not a structure or union
example2.y:47: error: request for member `str' in something not a structure or union
example2.y:48: error: request for member `str' in something not a structure or union
example2.y:48: error: request for member `str' in something not a structure or union
example2.y:48: error: request for member `str' in something not a structure or union
example2.y:51: error: request for member `str' in something not a structure or union
example2.y:51: error: request for member `str' in something not a structure or union
example2.y:52: error: request for member `str' in something not a structure or union
example2.y:52: error: request for member `str' in something not a structure or union
example2.y:52: error: request for member `str' in something not a structure or union
example2.y:55: error: request for member `str' in something not a structure or union
example2.y:56: error: request for member `str' in something not a structure or union
example2.y:58: error: request for member `str' in something not a structure or union
example2.y:58: error: request for member `str' in something not a structure or union

知道为什么我会收到此错误吗?


第一个明显的问题是你不应该定义YYSTYPE如果您正在使用 yacc。 Yacc 定义YYSTYPE从你的%union。你需要定义YYSTYPE如果你正在使用lex,但不使用yacc.

Your %union解析堆栈项类型仅包含int and str成员。示例:您已经定义了exp语法符号具有类型str,然后你就得到了这个产生式:

exp:        term                    {$$=$1; }
            | exp PLUS term         { $$=mknode($1,$3,"+"); }
            | exp MINUS term        { $$=mknode($1,$3,"-"); }
            ;

The mknode函数返回node *,但是类型$$符号是char *因为它代表的是exp在左侧,您输入的是str,以及str的成员%union is char *.

论据mknode也必须是node *. But $1 and $3没有那种类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flex/Bison 错误:请求非结构或联合中的成员“str” 的相关文章

  • YAML 解析 - lex 还是手工?

    我正在尝试编写一个简单的 YAML 解析器 我从 yaml org 阅读了规范 在开始之前 我想知道是否编写一个手卷解析器更好 或者 使用lex flex bison 我看了看libyaml C 库 好像没用lex yacc YAML 不包
  • 按语法解析为 AST(或 .y+.lang => xml)的工具

    给定一个词法分析器定义文件 一个语法文件 例如 postgresql y lflex 和 bison 程序来自它的源树 以及由这些词法分析器和解析器定义的文件 例如 SQL 查询 以某种标准形式 例如 XML 的 JSON 获取 AST 该
  • yyerror 的 Bison 冲突类型

    我试图用 flex 和 bison 制作一个计算器 但在编译过程中发现了一个错误 这是错误 C GnuWin32 src gt gcc lex yy c y tab c o tugas tugas y 51 error conflictin
  • 野牛转移而不是减少。减少/减少错误

    用我的语言我可以写 a 1 b 2 if true else if true Here is the problem else 我的语法不支持语句之间的换行符 else 只能与 if 一起使用 当我在规则中添加可选NL时 IfExpr IF
  • 对“yylex”的未定义引用

    我正在尝试使用 flex 和 bison 解析一个输入文件 但在编译程序时遇到一个困难 我附上了我的 Flex 和 Bison 代码以及我收到的错误 请帮我解决这些错误 lex l include
  • 是否可以设置规则的优先级以避免“最长最早”的匹配模式?

    另一个简单的问题 有没有办法告诉 flex 更喜欢匹配短事物的规则而不是匹配长事物的规则 我找不到任何关于这方面的好的文档 这就是我需要它的原因 我解析一个伪语言文件 其中包含一些与控制指令相对应的关键字 我希望它们成为绝对优先级 这样它们
  • 来自 bison 的 ANTLR 语法

    我正在尝试将语法从 bison 翻译为 ANTLR 野牛的语法本身非常简单 但我找不到简单的方法来做到这一点 野牛语法 expr expr or expr expr and expr expr 欢迎任何提示 链接 指针 谢谢 尤利安 在AN
  • 安装 Bison 后出现“make: yacc: Command not found”

    在 gcc 4 1 2 linux 5 中运行 makefile 时 出现以下错误 make yacc Command not found 通过谷歌搜索 我了解到可以通过安装 Bison GNU 解析器生成器来纠正此错误 但即使安装了 Bi
  • 具有启动条件的 Flex 可重入

    我正在尝试制作一个依赖于启动条件的可重入扫描仪 我正在遵循与这个人的问题类似的问题 使用 Flex 编写可重入词法分析器 https stackoverflow com questions 2634998 writing re entran
  • 野牛规格和优先顺序

    给定 Bison 规范 right TOK ADD TOK MUL 我想知道 TOK ADD 和 TOK MUL 的优先顺序是什么 另外如果我有野牛规格 left TOKMUL TOKADD left TOKDIV left TOKSUB
  • 对 yyparse 的未定义引用(flex 和 bison)

    我正在尝试学习一些 Flex Bison 并且正在阅读 John Levine O Reilly 的 Flex Bison 有一个我需要运行的示例 但是我无法运行它 因为出现以下错误 tmp ccKZcRYB o In function y
  • flex 中 yywrap() 的含义

    该指令在 flex lex 中意味着什么 define yywrap 1 和这个 t 我在下面的代码中找到它 t putchar t 输入 你好世界 输出 你好世界 根据Lex 和 Yacc 页面 http dinosaur compile
  • vc++下编译bison和flex程序时unistd.h相关困难

    我正在使用 bison flex 通过 cygwin 下载 和 vc 当我编译程序时 出现错误 fatal error C1083 Cannot open include file unistd h No such file or dire
  • Flex 和 Bison 彼此需要什么?

    当 Flex 和 Bison 一起使用时 为什么 Flex 文件需要 includebison 创建的 C 头文件 编译需要 bison 和 flex 创建的 C 源文件 bison 和 flex 创建的 C 源文件相互需要什么 bison
  • 构建 gcc 4.6 时遇到问题:对“yylex”的未定义引用

    我正在尝试构建 gcc 4 6 但我收到一些链接器错误 看起来这意味着 bison 或 flex 没有链接到 当 makefile 发出此命令时 gcc g fkeep inline functions DIN GCC W Wall Wwr
  • 解析器 - 调用 yytext 时出现分段错误

    我的解析器正在识别语法并使用 yylineno 指示正确的错误行 我想打印导致错误的符号 int yyerror string s extern int yylineno defined and maintained in lex yy c
  • 无法在 Windows 上安装 Flex(词法分析器),无法找到全面的说明

    这学期我在大学上一门关于 Flex Bison 的课程 在尝试让 Flex 工作时遇到了严重的问题 可能是由于我自己的无能 但我正在寻找一个非常非常难以研究的解决方案 我正在尝试使用命令提示符导航到包含 l Lex 文件的文件 然后使用 F
  • Flex 和 Bison 是否有 Sublime Text 语法?

    我正在 Sublime Text 中寻找一种语法 以某种方式突出显示我的 Flex 和 Bison 文件 或 lex yacc 使它们可读 Sublime Text 自动为 Flex 文件选择 Lisp 但这并不能解决问题一切都很好 有什么
  • Flex Bison Scanner解析的单元测试,如何驱动测试用例

    我有一个关于如何在单元测试中 驱动 基于 Flex Bison 的解析器扫描仪的问题 最终的解决方案将是可用的命令解析器或远程登录到目标板 我有一个使用标准输入的完全工作的 Flex Bison 实现 现在我的重点是为命令解析器运行单元测试
  • 规则永远不会减少,了解原因

    我正在学习使用 YACC 但我真的无法理解一些错误 我想知道为什么当我尝试使用 y 文件生成解析器时会出现此错误 这是我的 y 文件 它代表 Pascal 语言的上下文无关语法 Program program ident declarati

随机推荐

  • data.table高效回收

    我经常在 data table 中使用回收 例如当我需要对未来几年进行预测时 我会在未来的每一年重复我的原始数据 这可能会导致类似的情况 library data table dt lt data table cbind 1 500000
  • 如何使方法返回类型通用?

    考虑这个例子 OOP 书籍中的典型例子 我有一个Animal类 其中每个Animal可以有很多朋友 还有像这样的子类Dog Duck Mouse等添加特定行为 例如bark quack etc 这是Animal class public c
  • 如何在 strings.xml 中输入字符“<”?

    我想输入字符串 lt in strings xmleclipse中的文件 字符串有字符 lt 我无法将其添加到 xml 文件而不出错 我什至试图逃避 特点
  • 应用程序在设备上崩溃,但在模拟器 iOS 上运行

    App wasn t developed by me but now I have to add some features Code compiles add launches on simulator but immediately c
  • 允许的 HTML 4.01 id 值正则表达式

    你能帮我构建一个与有效的 W3C HTML 4 01 匹配的正则表达式吗id value 根据 W3C 规范 ID 和 NAME 令牌必须以字母 A Za z 开头 并且可以是 后跟任意数量的字母 数字 0 9 连字符 下划线 冒号 和句点
  • 很棒的 RDF 可视化工具 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想找到一些很棒的工具或样式来可视化我的 RDF 数据 以便在观看者访问 RDF 数据时能给他们带来震撼 问题是我现在得到的可视化工具只能
  • 在 PHP 的 foreach 循环中对项目进行分组

    所以 我正在尝试做一种用户市场类型的东西 有一个数据库item names 基本描述了虚拟物品 然后还有一张表market 当用户列出他们的一件商品时 该商品就会在用户 用户市场上出售 我这里唯一的问题是我想按项目名称对其进行分组 在ite
  • Swift 2 无法删除可选绑定

    我是 Swift 新手 对可选 没有更多的想法 我尝试从 plist 中获取数据 创建模型并显示UITableView 表格数据显示完美 但显示为Optional 捆绑 我尝试过改变 到 但无法解开 您能指导我解决这个问题吗 这是我的代码和
  • 数组字段的elasticsearch范围过滤器

    我有一个包含整数数组的字段 例如 source prices 20001 30001 我想过滤结果 使价格至少包含以下值之间的列表之一 20002 30000 不会返回上述文档 因为没有值介于 20002 和 30000 之间 但 1000
  • 使用 Django 模型选择 COUNT 个?

    有谁知道是否有办法只选择与 Django 中的查询匹配的行数 我编写了一个搜索 将结果分为 40 组 但我还想显示结果总数 我可以像 len Model objects filter name icontains search 这样的东西
  • 骨干网将模型传递给路由器

    我正在使用 require js 和 Backbone 开发一个 android 应用程序 我必须通过 touchend 事件将从集合中获取的模型传递给路由器 我该怎么做 define jquery underscore backbone
  • Rails 3.1 Edge 是否破坏了 XmlMarkup::Builder?

    网上有很多例子 例如http techoctave com c7 posts 32 create an rss feed in rails http techoctave com c7 posts 32 create an rss feed
  • 在 Jinja2 中使用“if any():”?

    在 Jinja2 中 我正在寻找一种方法来检查变量列表中至少一个是否具有值 基本上在 python 中我会这样做 if any item genre item type item color 但是 在 Jinja 中以下内容无效 if an
  • 1 个输入分隔中的 3 个值(数字)。蟒蛇3

    我现在正在编写一个代码 其中一部分需要要求用户在一行中输入 3 个不同的数字 每个数字可以是任意位数 假设我要求用户输入 他输入 31 722 9191 数字之间需要有空格 您将如何分离这些数字并为每个数字分配一个变量 例如 31 是 A
  • 如何从给定的数据中找到距当前位置最近的地点。

    我有位置地址列表 从我当前的位置 我需要到达最近的地点并且必须在地图上显示它 我怎样才能到达距离我当前位置最近的地方 首先 我将获取当前位置的纬度和长度 然后我将如何到达最近的地方 Thanks 首先获取您当前的location纬度 Lon
  • gzip 编码与 JSON 兼容吗?

    我正在尝试缩小 AJAX 调用中发生的一些奇怪现象的范围 我的 PHP 脚本的开头是这样的 ob start ob gzhandler 与 HTML 配合得很好 但是使用 application json 数据执行此操作有任何问题吗 有人知
  • Linq2Sql Many:很多问题,你会怎么做?

    我知道很多 Linq2Sql 不支持很多 但我正在研究解决方法 我正在使用我的小 SO 克隆 我有一个包含问题的表和一个包含标签的表和一个链接表 QuestionTag 所以我在问题和标签之间有一个经典的多 多关系 为了在首页上显示问题列表
  • 使用 Elasticsearch 进行简单的 AND 查询

    我正在尝试对两个指定字段进行简单查询 而手册和谷歌被证明没有什么帮助 下面的例子应该很清楚我想要做什么 query and term name family name daniel name given name tyrone 作为一个额外
  • 根据属性中的值设置元素的样式

    我实际上首先问过这个问题 但这是我的错 因为我无法正确描述那里的事情 所以我无法得到答案 但现在我将描述这里的一切 实际上 我想要一个 javascript 函数 它可以找到具有完整文档中任何元素的特定前缀的类 让我们以 html 标记为例
  • Flex/Bison 错误:请求非结构或联合中的成员“str”

    我正在学习 flex bison 我编写了以下程序但出现错误 include