问题标签 [jflex]

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 投票
1 回答
1154 浏览

regex - LookAhead 在 JFlex 中不起作用

我正在尝试使用 JFlex 构建解析器,但遇到了一个非常基本的问题。我想要这个令牌

并让它将“car_N”识别为“名词”而不识别“car_NN”。但它不起作用,如果我使用

“car_N”得到认可,但“car_NN”也返回“car_N”,这不是我想要的。

我想知道这里有人知道如何提供帮助吗?

JFlex 和 Flex 前瞻符号“$”似乎不起作用

0 投票
0 回答
161 浏览

java - JFlex 中的否定模式

我正在使用 JFlex 来解析字符串。我有状态VARIABLE我想解析 <...> 之间的所有内容

为此,我在我的.flex文件中定义了这个:

不幸的是[^>]+,它不起作用,因为 JFlex 不匹配任何字符串。显然,对模式的简化可以[a-z]+正常工作。

谢谢

0 投票
1 回答
474 浏览

parser-generator - 使用 JFlex 和 CUP 的形式化需求规范语言的编译器构造

我计划为需求规范语言构建编译器。我想出了使用 JFlex 作为词法分析器和 CUP 作为解析器的想法。

谁能让我知道可以将 JFlex 和 CUP 用于正式规范语言吗?所有文档和教程仅与编程语言有关。

任何可用于构建形式语言编译器的教程。

0 投票
1 回答
2019 浏览

jflex - 如何在 jflex 中注释代码

与 flex 不同,/* */并且\\

似乎在 jlex 中不起作用。他们给出错误“在词法动作开始时缺少大括号”。

0 投票
1 回答
880 浏览

string - JFlex 词法分析器。多行字符串

我正在尝试使用 JFlex 解析一些具有多行字符串文字的语言。

例子:

我创建了两个状态:

并创建了几个宏和规则:

但它不起作用。我得到“错误:无法匹配输入”

任何人都可以帮助我解决问题吗?

0 投票
1 回答
66 浏览

parsing - 如何在解析器中包括方法声明、常量、函数调用的计数?

我正在为类似于 java 但更简单的语言实现解析器。我写了一个词法分析器,现在正在写解析器。我已经写了语法,我需要实现元素的计数,但我不知道要放它。我认为它应该在制作后出现在动作代码中,但我不知道要初始化它。

例如

我应该在哪里定义和初始化变量 methodNumber 和 staticMethodNumber?

0 投票
1 回答
1336 浏览

regex - 带有文件结尾的可选 JFlex 前瞻

我正在尝试使用 JFlex 为 Fitnesse 编写词法分析器,但在使用 WikiWords 时遇到了问题(http://fitnesse.org/FitNesse.UserGuide.WikiWord)

我复制了链接的正则表达式,并使用以下正则表达式作为令牌:

不过,我在正确地进行词法分析时遇到了麻烦ThisIsNotAWikiWord。它连续有 2 个大写字母,因此不应将其视为常规单词。所以我需要添加一个前瞻来检查下一个字符是字母还是数字。类似的东西[A-Z]([a-z0-9]+[A-Z][a-z0-9]*)+ / [^A-Za-z0-9]

这适用于 lexing ThisIsNotAWikiWord,但它通常会破坏 lexing WikiWords。当 lexing 时WikiWord,前瞻没有额外的字符,所以它不匹配。

我想我想要一个可选的前瞻。如果在此之后有一个字符,那么最好不要成为其中之一。但如果输入中没有其他字符,让我们匹配。

文档让我相信这是不可能的,但我希望这只是我缺乏正则表达式。从文档:

在词法规则中,正则表达式 r 可以后跟一个前瞻表达式。前瞻表达式可以是“$”(行尾运算符)或“/”后跟任意正则表达式。在这两种情况下,前瞻都不会被消耗,也不会包含在匹配的文本区域中,但在确定哪个规则具有最长匹配时会考虑它(另请参见 4.3.3 如何匹配输入)。

在 '$' 的情况下, r 仅在输入的行尾匹配。行尾由正则表达式 \r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085 表示。所以a$等价于a / \r|\n|\r\n|\u2028|\u2029|\u000B|\u000C|\u0085。这与[5]中描述的情况有点不同:因为在JFlex $ 是一个真正的尾随上下文,文件结尾不计为行尾。

0 投票
2 回答
1857 浏览

regex - 用于匹配合法标识符名称的正则表达式

我是这个正则表达式的新手。我正在尝试编写一个正则表达式来匹配遵循这些规则的标识符:

它必须以字母开头,并且只能包含字母、数字和下划线。标识符还必须以字母结尾,并且不能有两个连续的下划线。

我试图为此提出正则表达式,但我没有取得太大的成功。我需要帮助。

0 投票
1 回答
266 浏览

java - 前瞻断言(正则表达式)在 JFlex 中不起作用

我正在尝试使用 JFlex 生成扫描仪。

我试图实现的语法的标识符规则之一如下(在正则表达式语法中):

我已经验证了上面的表达式实际上是有效的并且有效。然而,jFlex 1.4.3 似乎不喜欢我使用前瞻断言(?!_),因为它一直在抱怨“问号”。是我做错了什么还是在 JFlex 中使用前瞻有什么不同?

我正在使用“前瞻”来满足标识符名称中不能有两个连续下划线的规则。

任何帮助,将不胜感激。

0 投票
1 回答
1466 浏览

lex - 使用 JFlex 删除注释,但保留行终止符

我正在为 JFlex 编写词汇规范(它类似于 flex,但用于 Java)。我对 TraditionalComment ( /* */) 和 DocumentationComment ( /** */) 有疑问。到目前为止,我有这个,取自JFlex 用户手册

LexerToken.PASS意味着稍后我将在输出上传递行终止符。现在,我想做的是:

忽略注释中的所有内容,除了新行终止符

例如,考虑这样的输入:

事实上它是/* Some\n * quite long comment. */\n。使用当前的词法分析器,它将被转换为单行。输出将是单个 '\n'。但我想要两行,'\n\n'。一般来说,我希望我的输出始终具有与输入相同的行数。怎么做?