Bison 警告野牛汇编

我正在使用flex/bison开发编译器。 我的生成输出中有此警告 警告:在默认操作中键入clash('s') 有什么帮助吗?它似乎与源代码中的%token和%type声明有关。 如果没有源代码行以及相关的标记和类型声明,就很难为您提供帮助 如果指定val类型的expr并定义tptr类型的ID标记 %{ #include "parser.h" %} %type <val> expr %token <tptr> ID 请注意,在本例中,我当前使用的野牛级别打印的消息略有不

Bison如何在不移位的情况下描述语法中的可选语法以减少冲突?

我有一个用语法描述的文件。它有一个部分可以由一种或两种内容组成,并且可以按任意顺序排列: ... type_a_thing type_b_thing type_b_thing type_a_thing .... 或者只是 ... type_a_thing ... 或 或任何组合,在任何数量的事件中。类型a和类型b都有一个定义良好的结构。我已经设法描述了这一点,以便解析器能够工作,但我仍然得到了shift/reduce错误。 我在这里上传了一个简单的例子: 这是解决这个问题的正确方法吗?我做

Bison 删除移位/减少与点表达式和数组的冲突

对不起,我是野牛队的新手。我不明白这个问题以及如何解决它。如果您能“教我如何钓鱼”,同时指出问题和解决方案,我将不胜感激: %left '.' '+' %right '(' '[' %% OptionalExpressions : { $$ = nullptr; } | Expressions ; Expressions : Expression | Expressions ',' Expression ; Expression : Expression '+

Bison YACC规则没有减少

我正在努力学习YACC,但在理解它给我的警告信息时遇到了一些麻烦。这是我文件的一部分: define_character: WORD IS STRING COLOR { printf("%s's full name is %s and thier color is %s", $1, $3, $4); }; dialog: WORD COLON STRING { printf("%s says %s", $1, $3); }; change_scene: SCENE SETSC

Bison和Flex语法中规则的重用

我试图在客户端和服务器之间建立一个消息的请求-响应序列。 为了解析消息,我使用了flex和bison语法。 我有一个关于在不同语法中重用规则的问题。 例如,如果我有一个语法来处理请求 req_message: request_message |response_message |error ; 请求消息在哪里 request_message: |request_header_list request_hdr 请求_hdr是 request_hdr:

Bison “的含义<*&燃气轮机&引用;在莱克斯

我知道,我们可以在lex中定义一些条件,匹配: 1.<DIRECTIVE>{STRING} {printf("Matching the DIRECTIVE state!");} 2.<REFERENCE>{INTEGER} {printf("Matching the REFERNCE state!");} 3.[\n] {printf("Matching the INITIAL state?");} 4.<*>{DOBULE} {printf("Matchi

Bison 使用Flex&;的简单Java语法;野牛

我最近开始学习基本的Flex和Bison,因为我必须为简单(但不是太简单)语法制作解析器。我决定在语法中使用简化的Java语言。我制作了.l和.y文件,所有的东西都编译无误(我使用gcc进行编译)。 问题是,每次运行生成的程序时,我都会得到语法错误,即使是像这样的简单输入:private class Something{}。只有在输入空行(\n)时,我才没有收到语法错误。 我已经为此挣扎了几天,我怀疑我的语法有问题,但我似乎找不到。当然,可能还有其他问题,因为我对Flex和Bison还很陌生 任

Bison Yacc/野牛父规则

在Yacc/Bison中,我如何知道父规则以便采取相应的行动 例如: Module :ModuleName "=" Functions Functions :Functions Function | Function Function : DEF ID ARGS BODY { /* here, I would like to identify the parent rule and do something like this

Bison 解析器-移位/减少冲突

我的解析器有一个问题,这让我发疯,我想知道你们是否能帮助我 我有一套规则: exp: exp OP exp | exp OSQUAREPAR exp CSQUAREPAR | exp DOT LENGTH | exp DOT ID OPAR expList CPAR | READERS DOT INTREADER DOT READINT OPAR CPAR | DIGIT |

bison自动生成的文件输出中减少操作的$default是谁

有人知道这句话: $default reduce using rule 1 (P) 谁是$default。。。 它应该是一个特定的终端,但是是哪一个呢?默认操作适用于未使用另一个操作指定的每个终端。因此。。。我想编译一个表,看起来像龙书中的表,我要把reduce操作放在哪里?谁是州号码,谁是对应的代币?非常感谢@弗朗西丝科兰扎摆好了桌子。填写所有指定端子的操作。然后在空框中填入默认操作。谢谢=D确定。。我现在才明白你的意思;)@蓖麻

一起使用Flex和Bison

首先,我必须明确我是flex和bison编程的初学者 我试图编写一个代码来识别特定的声明部分。flex和bison代码可以理解其语法和逻辑,我将在下面介绍: %{ #include <stdio.h> %} [ \t\n]+ { /* Ignore all whitespace */ } var { return VAR; } real { return REAL; } boo

Bison 我的Lex和Yacc程序运行一次正常,然后在第二次尝试时崩溃?

我有两个非常小的文件(试图删除所有其他混淆的变量),分别用Lex和Yacc编写 法律: 当输入两次“a”时。我第一次按“a”时,它询问读取令牌:程序似乎运行正常,但第二次,它呕吐 我不知道为什么会这样。这是因为你的语法文件说只允许一个“a”。任何更多的都是错误,因此你会得到一个错误。你的语法规则是: butts: VAR 不多不少 因此,语法匹配的唯一有效程序是: a 任何其他输入,例如: aa 或: 将导致语法错误。您的规则非常明确地说oneVARonly;不是一系列变量;不只是几个V

Bison 野牛;柔性连杆-yylval型

我有一个学校项目,建立一个编译器。课程工作人员提供了一个头文件“proj.h”,其中包括一个结构“Node”,用于构建解析树和一组函数。 (该标题不包括节点类型的#defineforYYSTYPE,因此不应更改)。 我想在我的.lex文件中使用节点*,例如: yylval = makeNode(...); makeNode的定义: Node *makeNode(const char* type,const char* value, Node *child); 我尝试在.lex文件和.ypp中

flex和bison如何确定句子是否是语法的一部分

我刚开始使用flex和bison,我已经实现了一个简单的计算器。我试图确定输入是否是语法中的一个句子 例如,如果我输入:a=2;b=3;打印a+b 它会返回:“a=2;b=3;打印a+b;是一个句子” 现在它实际上会做计算器,但我不关心实际的计算,我只想知道输入是否是语法中的一个句子 我真的不知道该怎么做。任何帮助或提示都将不胜感激 我的flex代码是: %{ #include "y.tab.h" #include <stdlib.h>

Bison YACC-strlen$1是0,尽管字符串在那里

我的程序有一个奇怪的错误 我的YYSTYPE的结构是 %union { char *text; node *n; } %token <text> NUMBER 我是否遗漏了一些明显的信息?当您执行以下操作时: $<n>$->left = $<n>$->right = NULL; $$->left=$$->right=NULL; 您认为$$的值是多少?您是否已将其分配给节点对象的地址 为了节省时间:您没有分配它,

Bison “弹性投掷”;flex扫描仪中的输入失败”;在解析整个文件之后? 我试图用Flex和BySon在C++中进行解析器。我在网上看到“flex scanner中的输入失败”只出现在为解析提供错误文件的帖子中。但是在我的整个文件正确解析后,我得到了这个错误。是否存在flex无法正确检测EOF的错误?以下是相关定义:

野牛 %union { char node; char gate; int index; } %token END; %token <node> NODE; %token <gate> GATE; %token <index> INDEX; %% atpg: body END { cout << "Reading last line." << endl; }; body: assignmen

Bison 野牛不';当检测到解析错误时,不要调用yyerror

我正在用bison编写解析器。我遇到了一个问题,bison检测到了解析错误,但没有调用yyerror 下面是我处理类定义的脚本片段: %{ ... void yyerror(char *s); Program ast_root; /* the result of the parse */ Classes parse_results; }% ... %% /* Save the

Bison flex';s无法识别的规则(关于可选短语)

我编写了一个简单的flex文件: %{ #include "question.tab.h" %} %% COMMON(/[45]\.0)? return GOTCHA; [a-z]+ return ETC; %% 并试图编译。(flex-d question.l) 然后输出如下 question.l:7: unrecognized rule question.l:7: unrecognized rule question.l:7: un

Bison 我应该如何处理Flex lexer中的词汇错误?

我目前正在尝试使用Flex+Bison编写一个小型编译器,但我对如何处理错误,特别是如何使所有内容都协调一致,有点不知所措。为了激发讨论,请考虑下面我使用的字符串字符串: ["] { BEGIN(STRING_LITERAL); init_string_buffer(); } <STRING_LITERAL>{ \\\\ { add_char_to_buffer('\\'); } \\\" { add_char_to_buffer('\"

Bison Flex&;来自Argv的野牛yyin[]

我在做一个Flex&Bison项目。我让我的flex&bison完美地工作,但我正在尝试为true argv提供输入字符串。所以我改变了yyin,所以它使用了argv[1],但实际上它不起作用。它只是忽略了它 这是我的主要观点 #include "parser.hpp" #include <stdio.h> #include <iostream> #include <stdlib.h> int main(int argc, char const *argv

Bison 野牛减少情况

我有一个特殊的结构,调试时遇到了问题。 我希望这一积极的简化恰当地说明了这一问题: %token VAR IDENTIFIER NUMBER INT %% root: code_statements ; code_statements: code_statement | code_statements code_statement ; code_statement: var_statement | expression_stateme

bison:空伪变量

在cygwin环境中使用flex/bison而不是lex/yacc运行(§4.3)中的示例6时,我得到了意外/缺少的输出 我从下载部分下载并解包。在example6.compile文件中,我将“lex”替换为“flex”,否则保持原样(命令yacc在cygwin上执行exec'/usr/bin/bison'-y“$@”)。然后我运行example6.compile。它运行时没有错误,但有一些警告(见附录)。 然后运行示例6,输入示例文本: zone "." { type hint

Flex/Bison mini C编译器词法和语义分析转移/减少冲突

我想使用flex和bison为mini C语言编写一个编译器。我的语言示例如下所示: /* This is an example uC program. */ int fac(int n) { if (n < 2) return n; return n * fac(n - 1); } int sum(int n, int a[]) { int i; int s; i = 0; s = 0; while (i <

解决Yacc/Bison语法中的移位/减少冲突

我正在用GNUbison编写一个解析器来解析专有协议捕获的数据位。解析器具有以下标记: H标题 D数据 T终结者 五个数字的D.e.数据令牌组成了一个大容量B i、 e 理想情况下,输入应为 阿卡 所以我写了以下语法: %% CAPTURE : H PAYLOAD T { printf("[OK]");} ; PAYLOAD : B | PAYLOAD B ; B : DDDDDD %% 现在,为了

Bison 野牛的规则优先

以下是语法规则: ProcessExpression : EventExpression "->" ProcessExpression | ProcessName ; 请你告诉我,我怎样才能告诉野牛,第一条规则的优先级高于第二条规则 我试过: %nonassoc PROC %right "->" ProcessExpression : EventExpression "->" ProcessExpression

Bison 柔性/野牛。。。使用

我是Flex/Bison新手,我尝试为现有语法创建一个小的“解析器/词法分析器” 我使用以下命令 "bison/bin/bison.exe" -dv -p osl -o oslgram.cpp oslgram.y pause "flex/bin/flex.exe" -+ -o osllex.cpp osllex.l pause 但是我有一些错误。。。真的,我不明白这是什么意思!如果有人有使用此工具的经验,这将是伟大的 oslgram.y: conflits: 1 décalage/réduc

Bison PCYACC expect关键字等效项

PCYACC中是否有一个关键字相当于BISON的关键字: 我在中没有看到任何相应的命令行选项或语言功能。我们可以给规则(而不是运算符)以优先级吗? %expect NUMBER

Bison在Flex中定义注释

我必须为类c语言创建一个词法和语法分析器。在这种语言中,我们将注释定义为“符号//之后直到行尾的所有内容”。每次我的编译器到达“/”时,它仍然会给我语法错误 %% [ \t] { } [0-9]+ { SAVE_TOKEN; return TINTEGER; } "main_loop" { return TOKEN(TMAIN); } "{" { retur

flex/bison-指令执行延迟

与flex/bison有问题。我执行一条语句,结果仅在执行第二条语句后出现。为什么? 以下是我想要的: d>5 3 = 5 5+6= 11 PR 2+3 5 d>5 3 = 5 以下是我得到的结果(注意结果的底部): 这里是flex: %{ #include "calc.tab.h" #include <stdlib.h> %} %% [ ] {} [0-9]+ { yylval = atoi( yytext ); return NUM; } [a-z]

Bison 编译YaCC和Lex生成的C文件时出错

我有两个文件,我正在使用它们来尝试生成一个解析器 文件1:drive.l %{ #include<stdio.h> #include<string.h> #include"y.tab.h" /* #define START 1 #define STOP 2 #define FWD 3 #define BACK 4 #define UP 5 #define DOWN 6 #define TURN 7 #define LE

如何将高级EBNF结构(使用大括号)转换为BNF(与Bison一起使用)

我正在自学Flex/Bison,我正在用VHDL 93做一些实验。我对一些使用花括号的语法“productions”(在标准中称为productions)有问题 我理解标准中给出的示例的含义和转换方法: term ::= factor { multiplying_operator factor } term ::= factor | term multiplying_operator factor 但是关于: choices ::= choice { | choice } 我不知道如何转换这

Bison Yacc——“错误”是什么意思?

标记“错误”的含义是什么?如何在没有错误的情况下检测错误 匹配错误伪终端后,bison解析器继续以正常方式进行解析,但它会丢弃无法处理的令牌 如果遇到紧跟在错误令牌之后的令牌,它可以移动该令牌,这意味着它将停止丢弃令牌 但是,这不是解析器处理令牌的唯一方法。它也可以通过做一个减少来处理它 这里,handled一词的解释有点松散,因为reduction操作实际上并不接受lookahead标记。尽管如此,这足以减少误差产生 在这种情况下,必须注意不要打电话给yyerrok。如果使用yyerrok取消

Bison yyg->;yy_buffer_堆栈在yylex_init之后指向垃圾

经过几个小时的调试,我发现yyg->yy_bufer_堆栈指向了一些不应该指向的内存,后来导致了分段错误: (gdb) print yyg->yy_buffer_stack ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] : 0 Cannot access memory at address 0x2aaaaaab0c680 (gdb) print yyg->yy_buffer_stack $8 = (YY_BUFFER_S

Flex和Bison解析器,两个令牌的字符相同

我正在用Bison和Flex做一个小解析器来学习 我有一个问题,我希望能够将二进制或运算符作为 exp | | exp 其中字符“|”两次表示两个表达式的OR运算,一个向左,一个向右 但我也希望能够将绝对值定义为 | exp | 其中字符“|”像括号一样用于表示表达式的绝对值 现在我遇到了解析器无法正确解析字符串的问题,比如 | exp |+exp | 我想将其解析为 (|)(| exp |)+(exp)|) 表示一个表达式与另一个表达式相加的绝对值的绝对值 在这里,我的解析器将前两个管道字符作

Bison:错误时获取令牌

我有一个错误,但我很困惑解析器认为令牌是什么。我在yytname处看到一个名称数组和一个名为yytokenName的函数,但它们是静态的 在我的错误规则中,如何打印或传递错误标记的名称?如果使用glr选项,则yyerror有一个YYLTYPE参数,该参数包含词法分析器提供的标记位置

Bison 使用简单的计算器语法解决冲突移位/减少

您好,我刚刚开始在bison/yacc中进行一些解析。现在我的第一个程序已经失败了。出了什么问题?我使用的示例来自: 试试看: expr: INTEGER { $$ = $1; } | expr '+' INTEGER { $$ = $1 + $3; } | expr '-' INTEGER { $$ = $1 - $3; } bison/yacc不喜欢右递归。如果输入是1+2+3,当解析器到

如果Elseif else flex bison歧义

我正在尝试构建一个if()else if()else if()else示例。是否有任何方法可以在不使用%nonassoc并指定终端符号的情况下修复此问题? 正如您在代码中看到的,我有一些flex和bison。在flex中没有任何关键字elseif,只有else和if Flex keyword_if [Ii][Ff] keyword_else [Ee][Ll][Ss][ee] keyword_start [Ss][Tt][Aa][Rr][Tt] keyword_then [Tt][Hh]

Bison 如何删除换档/减速警告?

我正在尝试制作一个编译器,现在我正在尝试制作解析器。 我在这种状态下收到警告: 州89 62 expr: '(' expr . ')' 66 | expr . '+' expr 67 | expr . '-' expr 68 | expr . '*' expr 69 | expr . '/' expr 70 | expr . '%' expr 74 | expr . '&' expr 75

Bison Lex/Flex-扫描EOF字符

其他人遇到了我遇到的以下问题,但我找不到任何人报告解决方案。。让Flex发现EOF(文件末尾)。我需要Flex找到EOF并返回一个标记,表明它已经找到了它,这样它就可以告诉Yacc/Bison它已经到达了输入源文件的末尾,并且可以报告成功的解析 注意,这与本文不同,因为这是关于Lex/Flex的 任何帮助都会很棒。谢谢。Flex 仅匹配文件结尾的模式。 可能您可以向解析器返回一些表示文件结束的标记 如下所示 <<EOF>> return END_OF_FILE;

Bison 隐式优先

我正在阅读《Flex和Bison》一书,以了解解析器生成器的工作原理,其中有一个示例: calclist: /* nothing */ | calclist exp EOL { printf("= %d\n", $1); } ; exp: factor | exp ADD factor { $$ = $1 + $3; } | exp SUB factor { $$ = $1 - $3; } ; factor: term | fa

仅当找到EOF时,使bison减少到开始符号

我正在使用Bison和Flex。 我的Yacc输入文件中有以下规则: program : PROGRAM m2 declarations m0 block {cout << "Success\n"} ; program:program m2声明m0块{cout下面是一个这样做的示例: 首先是lex文件: %{ #include "grammar.tab.h" %} %x REALLYEND %option noinput nounput %% "END"

Bison 野牛的冲突类型

我想识别reduce/reduce冲突。 当两个或多个规则应用于相同的输入序列(令牌)时发生 例如: Expr:num {$$=$1}; |Expr '+' Expr;{}; |Expr '-' Expr;{}; 有谁能简单地给出一些如何识别减少/减少冲突的想法吗?好吧,你已经描述了冲突之间的区别。问题是什么 shift/reduce冲突意味着bison不知道是应该shift(读取一个终端并将其放在堆栈顶部)还是reduce(将堆栈上的多个终端/非终端转换为新的非终端)sh

“Flex/bison”;非C++&引用; 我想知道Flex/BySon的存在,它的工作方式与C++语言不同。我所能做的就是谷歌开发的自己的解析器,类似于Flex/BySun,但是我在寻找一个仍然使用.Y和.L文件的程序,语法类似,但是它使

“Flex/bison”;非C++&引用; 我想知道Flex/BySon的存在,它的工作方式与C++语言不同。我所能做的就是谷歌开发的自己的解析器,类似于Flex/BySun,但是我在寻找一个仍然使用.Y和.L文件的程序,语法类似,但是它使用的是不同于C++的不同。在java世界中,它是ANTLR:这里有一个一般的列表:@ Rusi:我不相信这个列表在大约15年内被更新了。维基百科的列表可能更好,但所有这些列表都需要谨慎使用。@rici为什么不把维基百科链接放进去?我刚刚评论了谷

flex、bison和readline:奇怪的段错误 GNUGDB(gdb)7.5-ubuntu 版权所有(C)2012免费软件基金会。 许可证GPLv3+:GNU GPL版本3或更高版本 这是自由软件:您可以自由更改和重新发布它。 在法律允许的范围内,不存在任何担保。键入“显示复制” 和“显示保修”了解详细信息。 此GDB配置为“i686 linux gnu”。 有关错误报告说明,请参阅: ... 正在从/path/to/drcalc…读取符号(未找到调试符号)…已完成。 (gdb)r 启动程序:/path/to/cdrcalc 程序接收信号SIGSEGV,分段故障。 0xb7e606b6英寸??()来自/lib/i386 linux gnu/libc.so.6 (gdb)

有人能帮忙吗?我的代码可以在branchreadline下载,您应该使用-g标志进行编译,这样gdb就可以显示更多的调试信息。如果您这样做,您将看到程序在尝试使用sh_line时在函数inp_readline中崩溃,该函数为空 原因是您将sh_-line0(将被解释为空指针)作为其初始值,然后在inp_-readline中检查sh_-line是否为非空,在这种情况下,您将释放旧字符串并使用readline读取新字符串。但是如果它是空的,它在开始时是空的,什么也不做,所以当你到达strlen(sh

这个switch语句处理的是一个Case如何使其成为多Case Bison

此switch语句处理一种情况,如何使其成为多个情况 S: Statement {printf("ACCEPTED");} 声明:交换机BRO ID BRC CBO E CBC E: A | A C A: A B | CASE DIGIT D B: BREAK SEMI C : DEFAULT D B D : COLON ID SEMI ; 这是一个问题,我想让语法在多个情况下被接受 你的语法很糟糕,不能解释重复的大小写。你需要发现如何表达事物的清单。一

Bison 将EBNF转化为野牛

我有一段EBNF语法,我想转换成Bison语法 E ::= {S [`;´]} [L [`;´]] 我没有太多语法方面的经验,但我想我设法弄明白了其中有一些可选部分和一些重复 我的尝试: E: S semiColOp E lOp semiColOp ; semiColOp: /* No Action*/ | semiCol//';' ; lOp: /* No Action*/ | laststat ; 我不能测试这个at

如何在bison语法中正确设置i%2==0的格式?

我的语法包含: expression : NUMBER { $$ = new Int($1); } | identifier { $$ = $<expr>1; } | INC identifier { $$ = new UnaryOperation($<expr>2, O_ADD_BEFORE); } | identifier INC { $$ = new UnaryOperation($<expr>1, O_ADD_

如何使bison不显示语法错误

我的代码中有一部分允许你发送一个错误,因为当这个错误出现时,我会做其他的事情 如何使bison在运行时不打印“语法错误” s19 : s19tex otros CORTAR otros ROJO otros FINLINEA f3 | s19tex otros CORTAR otros AZUL otros FINLINEA fdeath | s19tex otros CORTAR otros VERDE otros FINLINEA fdeath | s19te

  1    2   3   4   5   6  ... 下一页 共 6 页