问题标签 [lex]

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 投票
2 回答
4009 浏览

parsing - 如何使用 Flex 和 YACC 实现 #include 构造?

在解析过程中,如果我遇到包含标记,我想指示 YACC 打开指定为输入的文件并开始解析它。一旦这个解析完成,我想指示 YACC 返回文件并在包含表达式之后直接继续解析。我会将包含深度级别限制为 1。

0 投票
3 回答
440 浏览

c - Lex:如何防止它与子字符串匹配?

例如,我应该将“int”转换为“INT”。但是如果有“整数”这个词,我认为它不应该变成“整数”。

如果我定义"int" printf("INT");子字符串匹配。有没有办法防止这种情况发生?

0 投票
2 回答
2003 浏览

c - 在 YACC、Lex 和 C 文件之间共享内存

我有一个 YACC (Bison) 语法、一个 Lex (Flex) 标记器和一个 C 程序,我需要在其中共享一个struct(或实际上任何变量)。目前,我在语法文件中声明实际对象,并extern在我需要它的任何地方(也就是说,我的 C 源文件),通常使用指针来操作它。我在 C 文件和语法文件之间有一个共享的头文件(和实现)文件,其中的函数对操作我的数据结构很有用。这行得通,但感觉有点不舒服。有没有更好的方法在语法和程序之间共享内存?

0 投票
3 回答
5521 浏览

java - 寻找 lex/yacc 格式的 Java 语法

有人知道 lex/yacc 格式语法的在线存储库吗?我正在寻找一种 Java 语法来制作一个快速的源代码转换器。

谢谢!

编辑:我更喜欢寻找 lex/yacc,因为我想使用 fslex/fsyacc 并尽可能少地重写语法。

0 投票
3 回答
2288 浏览

c - 如何从 lex/yacc 生成不同的 yyparse 函数以在同一程序中使用?

我想从 lex/yacc 生成两个单独的解析函数。通常,yacc 会为您提供一个函数 yyparse(),您可以在需要进行一些解析时调用该函数,但我需要有几个不同的 yyparse,每个都与不同的词法分析器和语法相关联。手册页似乎建议使用 -p (前缀)标志,但这对我不起作用。我从 gcc 收到错误,表明 yylval 没有被正确地重新标记(即它声称没有定义几个不同的标记)。有谁知道生成这些单独功能的一般程序?

谢谢

0 投票
1 回答
3300 浏览

makefile - Yacc 和 Lex 包含混淆

我想知道如何正确编译带有调用 yyparse 的 Makefile 的程序?

这就是我所做的:

我有一个编译所有常规文件的 Makefile,它们与 y.tab.c 或 lex.yy.c 没有连接(我应该拥有它们吗?)

我在我的代码之上执行此操作:

这是我尝试制作程序时发生的情况:

当我只输入“make”时,它给了我很多警告。一些示例如下所示。

在函数yywrap': /src/parser.y:12: multiple definition ofyywrap' server.o :/src/parser.y:12: 这里首先定义 utils.o:

在函数yyparse': /src/y.tab.c:1175: multiple definition ofyyparse' server.o:/src/y.tab.c:1175: 这里首先定义 utils.o

我收到许多不同的错误,涉及不同的 yy_*** 文件。我过去通过多次调用 yyparse 成功编译,但这次似乎有所不同。这似乎很像某个地方的包含问题,但我不知道它是什么。我所有的头文件也有 ifndef 条件。

谢谢你的帮助!

0 投票
2 回答
1741 浏览

c - Lex(词法分析器)中正则表达式的大问题

我有一些这样的内容:

而且我需要抓住title的双引号之间的所有内容。我的第一次尝试是这样的:

^(" "|\t)+"title"" "*=" "*"\"".+"\","

它抓住了第一个例子,但没有抓住其他两个。另一个有多行,这就是问题所在。我想在\n某处更改为允许多行的东西,如下所示:

^(" "|\t)+"title"" "*=" "*"\""(.|\n)+"\","

但这无济于事,相反,它捕获了一切

比我虽然,“我想要的是在双引号之间,如果我抓住所有东西,直到我找到另一个"后跟的东西,怎么办?这样我就可以知道我是否在标题的末尾,无论行数如何,比如这:

^(" "|\t)+"title"" "*=" "*"\""[^"\""]+","

但这还有另一个问题......上面的例子没有它,但是双引号(")可以在标题声明之间。例如:

是的,它总是以反斜杠 ( \) 开头。

有什么建议可以解决这个正则表达式吗?

0 投票
1 回答
157 浏览

java - 用 flex 区分字符串

我需要标记一些字符串,这些字符串将根据= and !=. 在字符串具有运算符之前,我成功使用了正则表达式!=。在我的情况下,字符串被分成两部分,这是意料之中的,但!标记在左侧,即使它是给定运算符的一部分。因此,我认为 regex 不适合它,我想从中受益lex。由于我对 lex 没有足够的知识和经验,我不确定它是否适合我的工作。基本上,我试图用来自其他数据的实际值替换运算符的右侧。你们认为这对我的案子有帮助吗?

谢谢。

0 投票
2 回答
3001 浏览

ruby - 解析 ERB 文件的库

我试图以 Hpricot/Nokogiri 类型的方式解析而不是评估 rails ERB 文件。我尝试解析的文件包含与使用 ERB(标准 Rails 视图文件)生成的动态内容混合的 HTML 片段ERB 符号、<%、<%= 等,就好像它们是 html/xml 标记一样。

理想情况下,我会得到一个类似 DOM 的结构,其中 <%、<%= 等符号将作为它们自己的节点类型包含在内。

我知道可以使用正则表达式一起破解某些东西,但我正在寻找更可靠的东西,因为我正在开发一个工具,我需要在一个非常大的视图代码库上运行,其中 html 内容和 erb 内容是重要的。

例如,内容如:

将返回一个树结构,如:

0 投票
2 回答
6935 浏览

gcc - 无法编译 lex 的输出

当我尝试编译这个微不足道的 lex 程序的输出时:

使用:

我得到:

lex --version 告诉我我实际上使用的是“flex 2.5.35”,尽管 ls -fla `which lex` 不是符号链接。为什么输出无法编译的任何想法?