草庐IT

c++ - CMake 和 Flex/Bison

我正在将我的构建系统从configure/make转换为cmake系统系统有一些自动生成的文件,来自bison/flex。原来的makefile命令是:bison--defines=tokens.h--output=parser.cppparser.yflex--outfile=scanner.cppscanner.l我遇到了thisancientlink这似乎解释了如何做到这一点,但是当我使用以下自定义命令运行cmake时,似乎什么也没发生(没有错误消息,没有文件生成)FIND_PACKAGE(BISONREQUIRED)IF(BISON_FOUND)ADD_CUSTOM_COMMA

c++ - CMake 和 Flex/Bison

我正在将我的构建系统从configure/make转换为cmake系统系统有一些自动生成的文件,来自bison/flex。原来的makefile命令是:bison--defines=tokens.h--output=parser.cppparser.yflex--outfile=scanner.cppscanner.l我遇到了thisancientlink这似乎解释了如何做到这一点,但是当我使用以下自定义命令运行cmake时,似乎什么也没发生(没有错误消息,没有文件生成)FIND_PACKAGE(BISONREQUIRED)IF(BISON_FOUND)ADD_CUSTOM_COMMA

c++ - 解析器生成器的选择

Closed.ThisquestiondoesnotmeetStackOverflowguidelines。它当前不接受答案。想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。6年前关闭。Improvethisquestion好的,我知道这个问题听起来似乎是基于意见的,但是由于我有几个特定的​​选择标准,因此我认为这非常适合SO。所以,我在这里过去,我从事过很多编译器/解释器的工作(显然是一种业余爱好),由于某种原因,我坚持使用Lex/Yacc(或Flex/Bison),现在他们如何称呼他们很困惑...大声笑)。但是,由于我发现自己目前正在玩另一个业余口译员项目,因

c++ - 解析器生成器的选择

Closed.ThisquestiondoesnotmeetStackOverflowguidelines。它当前不接受答案。想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。6年前关闭。Improvethisquestion好的,我知道这个问题听起来似乎是基于意见的,但是由于我有几个特定的​​选择标准,因此我认为这非常适合SO。所以,我在这里过去,我从事过很多编译器/解释器的工作(显然是一种业余爱好),由于某种原因,我坚持使用Lex/Yacc(或Flex/Bison),现在他们如何称呼他们很困惑...大声笑)。但是,由于我发现自己目前正在玩另一个业余口译员项目,因

c++ - 弹性/Bison : Bad token management?

我的词法分析器和解析器有问题。首先,在我的词法分析器中有这样一行:"if"beginScope(stOTHER);returnIF;在我的解析器中:stmt:IF'('exp')'stmts...stmts:stmt|'{'stmt_list'}'|'{''}'在这样的代码中:if(sth){dosth;}if(other){doothersth;}beginScope将被调用两次,因为(我认为)Bison不知道if语句的结尾在哪里,所以当它找到IF标记时,他将其视为if语句的结尾,并再次读取它以开始另一个if语句...请帮帮我... 最佳答案

c++ - Bison 值(value) move/效率

我正在根据Bison的语义值构建我的解析数据结构。一个特定的结构是类型std::vector.我很好奇Bison内部如何处理move的语义值。我尝试分析c++.m4文件,发现:templateinlinevoid]b4_parser_class_name[::basic_symbol::move(basic_symbol&s){super_type::move(s);]b4_variant_if([b4_symbol_variant([this->type_get()],[value],[move],[s.value])],[value=s.value;])[]b4_locations

c++ - 将 Yacc/Bison 解析器与 C++ 程序连接

这不是thisquestion的拷贝因为解决方案不是使用解析器!我有一个Bison解析器,可以通过执行./parser来运行.我想从我的C++程序中调用Bison解析器。我不想做的是system(./parser因为那将假设解析器是预编译的,然后我的整个程序将不是平台独立的。如果我有一个函数:voidfoo(file_name){//callparseronfile_name}那怎么办呢?有任何想法吗?我认为这是调用yyparse或其他东西的情况,但我没有得到任何结果!谢谢:). 最佳答案 您使用的是适用于C++的版本吗?我用的是A

c++ - 使用 Bison/Antlr/Packrat/Elkhound/编写的 LLVM JIT 解析器

在LLVMtutorials有如何编写简单的JIT编译器的说明。不幸的是,本教程中的词法分析器和解析器是手动编写的。我在想,这样的解决方案适合学习目的,但不适合编写复杂的、生产就绪的编译器。似乎GCC和其他一些“大编译器”是手写的。但我认为,所有这些解析器生成器在编写自己的编译器时都提供了很大的插入力(尤其是当您独自完成时,没有团队)。是否可以将任何现有的解析器生成器(如Bison/Antlr/Packrat/Elkhound等)与LLVM一起使用来创建JIT编译器?我希望能够不断地(不是一开始就)用表达式“喂养”解析器,并在运行时编译它们。另外,我发现了很多关于“最好的、现代的”解析

c++ - Bison/柔性 : print erroneous line

我正在使用bison+flex来解析文件。出错时调用yyerror()。如何获取违反规则的行号或字符串,并打印错误信息? 最佳答案 行号很简单:yylineno是行号。在.l文件的顶部指定%optionyylineno。好吧,几乎很容易。Lookahead有时会使行号减一。与其说“Erroroccurredatline#xxx”,不如说错误发生在#xxx行附近。至于剩下的,就看你的了。您将不得不捕获不太有效的语法并调用适当的警告或错误处理程序。有关详细信息,请参见O'Reilly的“flex&bison”一书;它有一整章是关于错误信

c++ - 在没有全局或静态变量的情况下配置 Bison 和 Flex

我正在使用小型语言/IDE工作。我需要知道如何配置flex和bison一起工作,但不使用任何全局或静态变量。我需要将我的AST指针传递给Bison。我还需要bison也将我的AST传递给flex。这是一个线程环境,但我不需要任何线程同步。我需要为每个yyparse()调用一个单独的yylineno变量。我读到了%defineapi.pure、%parse-param和%option可重入。但我不知道如何让它们一起工作...提前谢谢...我试过这个:扫描仪.l:%{#include#include#include"parser.tab.h"#defineYY_DECLextern"C"i