问题标签 [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.
regex - LookAhead 在 JFlex 中不起作用
我正在尝试使用 JFlex 构建解析器,但遇到了一个非常基本的问题。我想要这个令牌
并让它将“car_N”识别为“名词”而不识别“car_NN”。但它不起作用,如果我使用
“car_N”得到认可,但“car_NN”也返回“car_N”,这不是我想要的。
我想知道这里有人知道如何提供帮助吗?
JFlex 和 Flex 前瞻符号“$”似乎不起作用
java - JFlex 中的否定模式
我正在使用 JFlex 来解析字符串。我有状态VARIABLE
我想解析 <...> 之间的所有内容
为此,我在我的.flex
文件中定义了这个:
不幸的是[^>]+
,它不起作用,因为 JFlex 不匹配任何字符串。显然,对模式的简化可以[a-z]+
正常工作。
谢谢
parser-generator - 使用 JFlex 和 CUP 的形式化需求规范语言的编译器构造
我计划为需求规范语言构建编译器。我想出了使用 JFlex 作为词法分析器和 CUP 作为解析器的想法。
谁能让我知道可以将 JFlex 和 CUP 用于正式规范语言吗?所有文档和教程仅与编程语言有关。
任何可用于构建形式语言编译器的教程。
jflex - 如何在 jflex 中注释代码
与 flex 不同,/* */
并且\\
似乎在 jlex 中不起作用。他们给出错误“在词法动作开始时缺少大括号”。
string - JFlex 词法分析器。多行字符串
我正在尝试使用 JFlex 解析一些具有多行字符串文字的语言。
例子:
我创建了两个状态:
并创建了几个宏和规则:
但它不起作用。我得到“错误:无法匹配输入”
任何人都可以帮助我解决问题吗?
parsing - 如何在解析器中包括方法声明、常量、函数调用的计数?
我正在为类似于 java 但更简单的语言实现解析器。我写了一个词法分析器,现在正在写解析器。我已经写了语法,我需要实现元素的计数,但我不知道要放它。我认为它应该在制作后出现在动作代码中,但我不知道要初始化它。
例如
我应该在哪里定义和初始化变量 methodNumber 和 staticMethodNumber?
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 $ 是一个真正的尾随上下文,文件结尾不计为行尾。
regex - 用于匹配合法标识符名称的正则表达式
我是这个正则表达式的新手。我正在尝试编写一个正则表达式来匹配遵循这些规则的标识符:
它必须以字母开头,并且只能包含字母、数字和下划线。标识符还必须以字母结尾,并且不能有两个连续的下划线。
我试图为此提出正则表达式,但我没有取得太大的成功。我需要帮助。
java - 前瞻断言(正则表达式)在 JFlex 中不起作用
我正在尝试使用 JFlex 生成扫描仪。
我试图实现的语法的标识符规则之一如下(在正则表达式语法中):
我已经验证了上面的表达式实际上是有效的并且有效。然而,jFlex 1.4.3 似乎不喜欢我使用前瞻断言(?!_)
,因为它一直在抱怨“问号”。是我做错了什么还是在 JFlex 中使用前瞻有什么不同?
我正在使用“前瞻”来满足标识符名称中不能有两个连续下划线的规则。
任何帮助,将不胜感激。
lex - 使用 JFlex 删除注释,但保留行终止符
我正在为 JFlex 编写词汇规范(它类似于 flex,但用于 Java)。我对 TraditionalComment ( /* */
) 和 DocumentationComment ( /** */
) 有疑问。到目前为止,我有这个,取自JFlex 用户手册:
LexerToken.PASS
意味着稍后我将在输出上传递行终止符。现在,我想做的是:
忽略注释中的所有内容,除了新行终止符。
例如,考虑这样的输入:
事实上它是/* Some\n * quite long comment. */\n
。使用当前的词法分析器,它将被转换为单行。输出将是单个 '\n'。但我想要两行,'\n\n'。一般来说,我希望我的输出始终具有与输入相同的行数。怎么做?