草庐IT

c++ - 在 BISON 中什么时候调用 %destructor?

何时在BISON中调用%destructor?我有以下Bison代码:%union{char*sval;Variable*vval;}%tokenVARIABLE%tokenLiteral%typeExpressionVARIABLE%typeLiteral%destructor{delete$$;}%destructor{delete$$;}LiteralVariable是一个类。我以为在处理一行之后,所有Variable对象都将被释放,但我看不到任何析构函数被调用。这将直接导致内存泄漏...编辑:要清楚;我为新token分配了一个新的Variable对象,并将此token推送到BI

c++ - 我如何在 flex 和 bison 中使用 C++?

我有一个学校项目,我们需要使用flex和bison。我想使用C++,这样我就可以访问STL和我自己编写的类。我们获得了以下Makefile:CC=gccCFLAGS=-gOBJs=parse.tab.osymtab.oattr.olex.yy.odefault:parserparser:${OBJs}${CC}${CFLAGS}${OBJs}-oparser-lfllex.yy.c:scan.lparse.tab.hattr.hflex-iscan.lparse.tab.c:parse.yattr.hsymtab.hbison-dvparse.yparse.tab.h:parse.ta

c++ - 如何从 YACC 获取 AST?

我知道如何让YACC生成AST,但你如何真正得到它?我的意思是,您实际上如何从YACC获取根节点的值? 最佳答案 Yacc一次只返回一个节点,而且它总是您刚刚在较早的时间给yacc的东西,即您想要从减少的生产中返回的任何东西或任何您想要的东西从终端符号返回。(抱歉,您说过您知道这一点,但有些阅读本文的人可能不知道。)因此,从根规则或顶级规则中获取您想要返回的任何内容,并以您喜欢的任何方式保存它(在您附加的C缩减代码中)。 关于c++-如何从YACC获取AST?,我们在StackOverf

c++ lex和bison对自制标记器/解析器的优势是什么

出于学习目的,我想在C++中进行一些解析和标记化。现在,在网上阅读有关此主题的内容时,我经常会遇到bison/yacc和lex。使用这些比使用STL或boost::regex或什至只是C编写的标记器/解析器有任何主要好处吗? 最佳答案 我最近着手编写一个简单的词法分析器和解析器。事实证明,词法分析器更易于手动编码。但是解析器有点困难。我的Bison生成的解析器几乎立即就可以工作,它给了我很多有用的信息,告诉我在哪里忘记了状态。后来我手动编写了相同的解析器,但在我让它完美运行之前进行了更多的调试。为词法分析器和解析器生成工具的吸引力在

c++ - 我如何在 Flex/bison 中实现 If 语句

我没有收到错误,请你帮我解决一下,这是.l和.y文件。谢谢。%{#include"ifanw.tab.h"externintyylval;%}%%"="{returnEQ;}"!="{returnNE;}""{returnGT;}">="{returnGE;}"+"{returnPLUS;}"-"{returnMINUS;}"*"{returnMULT;}"/"{returnDIVIDE;}")"{returnRPAREN;}"("{returnLPAREN;}":="{returnASSIGN;}";"{returnSEMICOLON;}"IF"{returnIF;}"THEN"{r

c++ - Bison 可以解析 UTF-8 字符吗?

我正在尝试制作一个Bison解析器来处理UTF-8字符。我不希望解析器实际解释Unicode字符值,但我希望它将UTF-8字符串解析为字节序列。现在,Bison生成以下有问题的代码:if(yychar问题是UTF-8字符串的许多字节将具有负值,而Bison将负值解释为EOF,并停止。有解决办法吗? 最佳答案 bison是的,flex不是。有一次我需要一个bison解析器来处理UTF-8编码的文件,我最终编写了自己的yylex函数。编辑:为了提供帮助,我使用了glib中提供的大量Unicode操作。(有一个gunicode类型和一些我

windows - 如何在 Windows 上编译 LEX/YACC 文件?

我有Lex和YACC文件来解析我的文件(.l文件和.y文件)。如何编译这些文件以及如何在windows平台上为它们制作等效的.c文件? 最佳答案 至于今天(2011-04-05,更新于2017-11-29),您将需要最新版本的:flex-2.5.4a-1.exebison-2.4.1-setup.exe之后,在您喜欢的名称中不带空格的目录中进行完整安装。我建议使用C:\GnuWin32。不要将其安装在默认(C:\ProgramFiles(x86)\GnuWin32)中,因为bison在目录名称中存在空格问题,更不用说括号了。另外,考

【手写数据库toadb】语言解析器,编程语言是这样被解析理解,解析器利器flex和bison,解析树与逆波兰式

flex与bsion使用介绍​专栏内容:手写数据库toadb本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。​开源贡献:toadb开源库个人主页:我的主页管理社区:开源数据库座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.文章目录flex与bsion使用介绍前言

html - 需要一个用于 HTML 的简单 Bison 语法

我查看了Bison的帮助并写了这篇文章,但我不确定它是否完全正确。我还需要一个yylex()来处理词法分析器(它应该是Flex工具)。我知道一些关于上下文无关语法的基本知识。但我不知道如何正确实现它们!:(我想要一个用于HTML的简单Bison语法。问题是:下面的语法应该改变什么?%{#includeintyylex(void);intyyerror(charconst*);%}%tokenNUM_TOKENFILENAME_TOKENCOLOR_TOKENNAME_TOKEN/*HtmlGrammerfollows...*/%%/*Anyhtmltagfollowthispatter

html - 需要一个用于 HTML 的简单 Bison 语法

我查看了Bison的帮助并写了这篇文章,但我不确定它是否完全正确。我还需要一个yylex()来处理词法分析器(它应该是Flex工具)。我知道一些关于上下文无关语法的基本知识。但我不知道如何正确实现它们!:(我想要一个用于HTML的简单Bison语法。问题是:下面的语法应该改变什么?%{#includeintyylex(void);intyyerror(charconst*);%}%tokenNUM_TOKENFILENAME_TOKENCOLOR_TOKENNAME_TOKEN/*HtmlGrammerfollows...*/%%/*Anyhtmltagfollowthispatter