问题标签 [flex-lexer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
6747 浏览

compiler-construction - 如何使用缩进作为带有 bison 和 flex 的块分隔符

我了解如何在 bison + flex 中实现缩进作为块分隔符。就像在 python 中一样。我正在编写自己的编程语言(主要是为了好玩,但我打算将它与游戏引擎一起使用),我将尝试提出一些特别的东西,以最大限度地减少样板并最大限度地提高开发速度。

我已经用 C 编写了一个编译器(实际上是 Nasm 翻译器的“langToy”),但失败了。由于某种原因,它只能处理整个源文件中的一个字符串(好吧,我已经醒了超过 48 小时 - 所以......你知道,大脑崩溃了)。

我不知道大括号和/或开始 - > 结束是否更容易实现(我这样做没有问题)或者只是我的大脑被锁定了。

提前致谢!


更新:好的,我不知道如何用 flex 来做。我在将多个 DEDENT 返回到解析器时遇到问题。Flex/Bison 对我来说相对较新。


更新 2: 这是我迄今为止提出的 flex 文件;它不太明白:

您可以尝试使用它,也许您会看到我缺少的东西。在 Haxe ( return t_dedent( num ); ) 中返回多个 dedent 会很容易。

此代码并不总是正确匹配缩进/缩进。


更新 3:我认为我会放弃对 flex 的希望并以自己的方式去做,如果有人知道如何在 flex 中做到这一点,无论如何我都会很高兴听到它。

0 投票
1 回答
4378 浏览

c - Flex(lex) 和 Bison(yacc) 的错误处理

来自野牛手册:

在每个输入为一行的简单交互式命令解析器中,允许 yyparse 在错误时返回 1 并让调用者在发生这种情况时忽略输入行的其余部分(然后再次调用 yyparse)可能就足够了。

这几乎是我想要的,但我在上班时遇到了麻烦。基本上,我想检测 flex 中的错误,如果检测到错误,让 Bison 丢弃整行。我现在拥有的东西不能正常工作,因为我的命令仍然被执行:

在我的野牛文件中:

在我的 Flex 中:

0 投票
2 回答
3736 浏览

c - 如何使用 Flex/Lex 和 Yacc/Bison 进行变量替换

维基百科的插值定义 我只是在学习 flex / bison,我正在用它编写自己的 shell。我正在尝试找出一种进行变量插值的好方法。我最初的方法是对我的主目录或 $myVar 之类的东西进行 flex 扫描,然后使用查找函数将 yyval.string 设置为返回的内容。我的问题是,当文本出现一个标记时,这对我没有帮助:

我对变量的 lex 定义:

然后在我的语法中,我有类似的东西:

有人知道处理这种事情的好方法吗?我对这一切都错了吗?

0 投票
3 回答
26036 浏览

g++ - 未定义对 'yylex()' 的引用

我正在尝试使用 flex 和 bison 创建一种简单的脚本语言。现在,我只是想让计算器工作。

不过,我无法编译它。当我运行这个makefile时:

在我的 .l 和 .ypp 文件中,我收到此错误:

如果我发出这样的命令all

它说它找不到-lfl。如果我这样做:

它回到undefined reference错误。

对不起,我对此一无所知。

编辑:我安装了 flex。我尝试将它从 -lfl 更改为 C:/GnuWin32/lib/libfl.a (我正在尝试使用 Windows,因为 Linux 在我的计算机上有奇怪的问题,而且我还没有 Mac),但它仍然有同样的错误。

0 投票
2 回答
729 浏览

c - Flex 和 Bison 的词汇搭配

我一直在寻找一种不符合一般 Flex/Bison 范式的语言。根据语义上下文,它具有完全不同的令牌规则。例如:

Bison 显然支持对这些类型的语法的识别,但它需要“ Lexical Tie Ins ”来有效地支持它们。它为此提供了一个接口——但我对如何根据上下文提供不同的弹性正则表达式感到困惑——如果这是可能的话。

提前致谢 :)

0 投票
4 回答
3345 浏览

c - 使用 GCC 和 Flex/Bison 发出无效警告的声明

使用 gcc 和 -Wall 选项编译我的项目时,我收到一条警告,提示我的 flex 文件最后一行不存在的语句无效:

警告:

外壳命令:

lex 文件的最后一部分:

任何人都知道为什么我可能会收到此警告?

如果我禁止所有 #line 指令,则错误是:

其中指的是 ECHO 行:

0 投票
8 回答
2296 浏览

compiler-construction - 编写编译器......什么是对的,什么是错的?

好的,在我寻找编写编译器所需的东西的过程中,我遇到了一些障碍。似乎我发现的每一种技术或工具在某个地方都有一些反对意见。

我现在使用 Bison 和 Flex,但我感觉这种方法已经过时了。这是真的?这是继续编写完整的编程语言的一种良好的前向兼容方式吗?

在大量不同的概念和工具(ANTLR、LL(k)、GLR、LALR、LLVM、Flex、Bison)中,编写编译器的当前趋势和最佳实践是什么?龙书过时了吗?

0 投票
1 回答
212 浏览

python - 选择性合并两个或多个数据文件

我有一个可执行文件,其输入包含在一个 ASCII 文件中,格式为:

换句话说,一些通用输入和一些新实例的一些参数值。参数声明不规范;一些数字用逗号分隔,其他数字采用科学计数法,其他数字在引号内,间距不是恒定的,等等。

某些场景的评估要求我输入一个“主”数据文件并将实例 2 到 6 的参数数据复制到另一个数据文件,该文件可能已经包含所述实例的数据(在这种情况下,数据应该是覆盖)和可能的其他(应保持不变的数据)。

我写了一个 Flex 词法分析器和一个 Bison 解析器;他们可以一起吃一个数据文件并将参数存储在内存中。"general input from 'scenario'; instances 1 though 5 from 'master'; instances 6 through 9 from 'scenario'; ..."如果我使用它们打开两个文件(主文件和“场景”),那么选择性地向第三个新文件写入所需参数(如 中)、保存并删除原始场景文件应该不会太难。

其他信息: (1) 文件高度敏感,完全屏蔽用户更改主文件非常重要;(2) 文件大小可控(从 500K 到 10M)。

我知道我可以用十行代码完成,这里的一些人可以用两行代码完成。你会如何处理这个问题?一个 Pythonic 的答案会让我哭泣。严重地。

0 投票
1 回答
582 浏览

c - flex,定义字符

我想定义 char(即 'a AND 'a'),但在检查错误时遇到问题。这里我如何编写规则并检查:

代码

最后检查一下:

0 投票
1 回答
246 浏览

compiler-construction - 这个程序语法是否只识别名称为“ID”的变量?

我需要在 lex/flex 中创建一个扫描仪来查找令牌,并在 yacc/bison 中创建一个解析器来根据以下语法处理这些令牌。当我在制作扫描仪的过程中,在我看来,这种语言中的变量、函数和数组只能有名称“ID”。我误读了这个 yacc 文件吗?