flex-lexer 相关问题

Flex(快速词法分析器生成器)是一个自由软件,可生成词法分析器(“扫描仪”或“词法分析器”)。

未定义对`yylex'的引用

我正在尝试使用 flex 和 bison 解析一个输入文件,但在编译程序时遇到一个困难。我附上了我的 Flex 和 Bison 代码以及我收到的错误。 请帮忙...

回答 4 投票 0

为什么类型无法识别以及为什么会出现分段错误? [重复]

我正在开发一个涉及编译器或解释器的抽象语法树 (AST) 结构的 C 项目。该项目旨在解析编程语言并生成 co...

回答 1 投票 0

C 代码中的 AST 结构问题导致编译错误和分段错误并且无法识别定义的类型

我正在开发一个涉及编译器或解释器的抽象语法树 (AST) 结构的 C 项目。该项目旨在解析编程语言并生成 co...

回答 1 投票 0

Flex 和 Bison 未创建头文件 (.h)

所以对于我的最终项目,我需要使用 flex 和 bison 编写一个解析器。我已将其下载到我的路径中,并且能够运行所有命令。唯一的问题是,当我运行以下命令时,.y ...

回答 1 投票 0

使用正则表达式匹配任意utf-8编码的汉字

比如我想匹配一个由m到n个汉字组成的字符串,那么我可以使用: [单个汉字正则表达式]{m,n} 有没有单个Chin的正则表达式...

回答 6 投票 0

为什么我的解析器在更改另一部分时会错误地读取一部分?

我在 lex 文件中定义了这些标记: (?xi: ADC|AND|ASL|位|BRK|CLC|CLD|CLI|CLV|CMP|CPX| DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LDX|LDY|LSR| NOP|ORA|PHA|PHP|PLA|PLP|ROL|ROR|RTI|RTS|SBC| ...

回答 1 投票 0

为什么bison不符合这个语法规则?

我有这些 lex 令牌: ,[Yy] { 返回COMMAY; } (?xi: ADC|AND|ASL|BCC|BCS|BEQ|BIT|BMI|BNE|BPL|BRK| BVC|BVS|CLC|CLD|CLI|CLV|CMP|CPX|CPY|DEC|DEX| DEY|EOR|INC|INX|INY|JMP|JSR|LDA|LD...

回答 1 投票 0

C宏可以在flex中扩展吗?

据我所知,以下内容在 Flex 中不起作用: ... std::string opt_val = "--help"; %% opt_val { /* 做某事 */ } %% 我可以扩展 C 宏吗? 我试过这个: %{ #定义

回答 1 投票 0

Flex(词法分析器)对 unicode 的支持

我想知道最新版本的flex是否支持unicode? 如果可以的话,如何使用模式来匹配汉字呢? 更多的: 使用正则表达式匹配任意utf-8编码的汉字

回答 2 投票 0

Flex(词法分析器)- 匹配 unicode

有没有办法让flex按照以下方式匹配unicode ascSymbol !|#|$|%|&|⋆|+|.|/|<|=|>|?|@|\|^|-|~|: uniSymbol \p{符号}|\p{Other_Symbol}|\p{标点符号} 符号

回答 1 投票 0

使用 Flex 时,m4 出现“错误:字符串中的文件结尾”错误

我有一个一直在处理的flex输入文件,我刚刚将其更改为使用%option extra-type,但是我们一直使用的flex版本2.5.27不支持它。 (我得到以下内容

回答 1 投票 0

Bison/flex 语法问题

我无法编写解析此 yaml 的正确语法: - 名称:Qwerty 价值观: - 姓名:QQ - 姓名:pp - 姓名:奇里克 价值观: - 姓名:zzz - 姓名:瓦斯德 价值观: - 姓名:yyy ...

回答 1 投票 0

扫描仪中长注释的输入缓冲区溢出

我使用以下规则定义了 LEX 扫描器来扫描(嵌套)注释: “(*”{ int linenoStart,级别,ch; linenoStart = yylineno; 级别=1; 做 { ch =

回答 1 投票 0

这是内存分配问题吗?

我最近一直在研究一种客户编程语言,我已经使用c flex(词法分析器生成器)和bison(解析器生成器)将数组和变量之类的东西实现到了客户语言中,我

回答 1 投票 0

yacc/bison 的分段错误

我正在尝试为学校作业编写一个简单的 HTTP 请求解析器,但我遇到了无法摆脱的分段错误。我认为我的生产规则没问题。我已经处决了野牛...

回答 3 投票 0

flex扫描器读取失败,用gcc编译

编译整个源代码后,在链接时出现此错误: /x86_64-pc-linux-gnu/bin/ld:Flex 扫描仪读取失败 有什么指示可能出问题以及在哪里寻找它吗?

回答 2 投票 0

在 lex.yy.c 中查找表代表什么?

我正在挖掘一个用 flex 构建的词法分析器(这里是准确的),并试图了解发生了什么。从来没有看过 C,我已经放弃尝试找到等效的东西来理解 p...

回答 1 投票 0

Flex/C++:'yypanic'未在范围内声明,错误:重新定义'class yFlexLexer','yyFlexLexer'未在此范围内声明

您好,我正在尝试将 Flex 与 C++ 结合使用。阅读 Flex 手册后,我开始编写一个小示例来构建我的项目。 我最初想出了这个小例子。 #包括 您好,我正在尝试将 Flex 与 C++ 结合使用。阅读 Flex 手册后,我开始编写一个小示例来构建我的项目。 我最初想出了这个小例子。 #include <string.h> #include <iostream> #include <sstream> #include <string> #include <streambuf> #include <fstream> int main() { std::string stringvalues = "TOKEN TEST 123"; std::istringstream inputStringStream(stringvalues); std::istream& inputStream = inputStringStream; std::ofstream outputStream("test.txt"); yyFlexLexer myTest(inputStream, outputStream); } 在构建文件夹内,当我执行 cmake .. 然后点击 make 时,我收到以下错误: alfredo@alfredo-ThinkPad-T440p:~/repos/FlexCpp/build$ make [ 20%] Linking CXX static library libkeywords.a [ 20%] Built target keywords [ 40%] Building CXX object src/back-end/CMakeFiles/Foo.dir/main.cpp.o /home/alfredo/repos/FlexCpp/src/back-end/main.cpp: In function ‘int main()’: /home/alfredo/repos/FlexCpp/src/back-end/main.cpp:17:5: error: ‘yyFlexLexer’ was not declared in this scope 17 | yyFlexLexer myTest(inputStream, outputStream); | ^~~~~~~~~~~ make[2]: *** [src/back-end/CMakeFiles/Foo.dir/build.make:80: src/back-end/CMakeFiles/Foo.dir/main.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:126: src/back-end/CMakeFiles/Foo.dir/all] Error 2 make: *** [Makefile:91: all] Error 2 奇怪的是,如果我注释掉main.cpp中的最后一行 //yyFlexLexer myTest(inputStream, outputStream); 我收到以下错误: lexer.l: In member function ‘virtual int yyFlexLexer::yylex()’: lexer.l:172:1: error: ‘yypanic’ was not declared in this scope /usr/local/flex/include/FlexLexer.h: At global scope: /home/alfredo/repos/FlexCpp/src/back-end/lexer.yy.cc:49:25: error: redefinition of ‘class yyFlexLexer’ 49 | #define yyFlexLexer yyFlexLexer | ^~~~~~~~~~~ /home/alfredo/repos/FlexCpp/src/back-end/lexer.yy.cc:49:25: note: previous definition of ‘class yyFlexLexer’ 49 | #define yyFlexLexer yyFlexLexer | ^~~~~~~~~~~ make[2]: *** [src/back-end/CMakeFiles/Foo.dir/build.make:94: src/back-end/CMakeFiles/Foo.dir/lexer.yy.cc.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:126: src/back-end/CMakeFiles/Foo.dir/all] Error 2 make: *** [Makefile:91: all] Error 2 我的项目目录如下所示。 backend/ |- main.cpp (what you saw ealier) |- CMakeLists.txt |- keywords.hxx (contains enum tokens and struct) |- lexer.l |- lexer.yy.cc (this will be generated by lexer.l when we compile with c++ we set %option c++ in our lexer.l file ) 这是我的 lexer.l 的样子 /* we dont have an interactive session. */ %option never-interactive /* we will handle the nodefault rule. */ %option nodefault /* we dont want yyinput() and yyunput(). */ %option noinput nounput /* don't include <unistd.h> we dont need it. */ %option nounistd /* not needed for now, in the future when users can work with multiple files we can start using it. */ %option noyywrap /* these two options are doubled to get more detailed reports. write performance report to stderr. */ %option perf-report perf-report /* write statistics summary to stderr. */ %option verbose verbose /* generate warning messages for mistakes. */ %option warn /* maintain current line number in yylineno. */ %option yylineno %option c++ /* c items that can be used in the rules section */ %{ #include <stdio.h> #include <keywords.hxx> int iskeyword(char * keyword); %} digit [0-9] exponent [ee][-+]?{digit}+ id_start [_a-za-z] id_after {id_start}|{digit} /*===================rules===================*/ %% /* a bunch of rules */ %% /*=================user-code=================*/ #include <keywords.hxx> /*As mentioned by Flex manual we include this if our main() is not in this file */ #include <FlexLexer.h> int iskeyword(char * keyword){ for(int index = 0; index < NUM_KEYWORDS; index++){ if(strcmp(keywords[index].keyWord, keyword)){ return keywords[index].token; } } return 0; } CMakeLists.cmake cmake_minimum_required(VERSION 3.5) project( TestingProj ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /usr/local/flex/include") find_package(FLEX REQUIRED) add_library(keywords keywords.hxx) set_target_properties(keywords PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(keywords PUBLIC ./) FLEX_TARGET( gen_lexer lexer.l lexer.yy.cc ) add_executable( Foo main.cpp ${FLEX_gen_lexer_OUTPUTS} ) target_link_libraries(Foo PUBLIC keywords) target_link_libraries(Foo PUBLIC ${FLEX_LIBRARIES}) 如果我记录以下内容 message("FLEX_FOUND ${FLEX_FOUND}") message("FLEX_EXECUTABLE ${FLEX_EXECUTABLE}") message("FLEX_VERSION ${FLEX_VERSION}") message("FLEX_LIBRARIES ${FLEX_LIBRARIES}") message("FLEX_INCLUDE_DIRS ${FLEX_INCLUDE_DIRS}") 我明白了 FLEX_FOUND TRUE FLEX_EXECUTABLE /usr/local/flex/bin/flex FLEX_VERSION 2.6.4 FLEX_LIBRARIES /usr/local/flex/lib/libfl.so FLEX_INCLUDE_DIRS /usr/local/flex/include 我也厌倦了遵循 Flex 手册。没有帮助。 如果您想创建多个(不同的)词法分析器类,您可以使用“-P”标志(或 prefix= option) 将每个 yyFlexLexer 重命名为其他“xxFlexLexer”。然后是你 每个词法分析器类可以在其他源中包含 一次,首先重命名 yyFlexLexer如下: #undef yyFlexLexer #define yyFlexLexer xxFlexLexer #包括 #undef yyFlexLexer #define yyFlexLexer zzFlexLexer #包括 我不确定我做错了什么。我花了很多时间试图让 Flex 和 C++ 工作。我能够让 Flex 和纯 C 工作,但只是 C++ 我遇到了麻烦。截至发布时,我的最佳猜测是 FlexLexer.h 文件存在问题。出于某种原因,我从源代码构建的其他项目在其 FlexLexer.h 文件夹中构建了 /include 文件。据我所知,它现在指向 FlexLexer.h 的正确位置,我的情况是在 /usr/local/flex/include/FlexLexer.h: 或者我的 .cmake 文件可能有问题。 任何帮助将不胜感激。 我首先按照 Tysvarev 留下的评论解决了这个问题,我引用了他们。 “不需要显式包含 lexer.l 中的该文件。但是在 main.cpp 中,你需要包含 FlexLexer.h,否则编译器没有有关 yyFlexLexer 类的信息” 然后在%{ ... %}块内,我像这样定义了yypanic void yypanic( char* errorMessage); 最后在我写的用户代码中 void yypanic(char * errorMessage) { std::cout << errorMessage << std::endl; }

回答 1 投票 0

词法分析时如何检测字符串?

我正在使用一些语法在词法分析期间检测字符串 "".*"" 返回 TOK_STRING; 但这不起作用。

回答 2 投票 0

Bison 解析器总是打印语法错误而不指定错误所在

大家好,我正在尝试为这个简单的java简单文件编写一个解析器,基本上我希望这个解析器能够识别和验证指令块。找到正确的指令块后,该值...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.