JFlex:正则表达式内的负提前

时间:2019-02-27 12:03:39

标签: regex jflex wolfram-language

我的问题可以分解为大正则表达式中可能发生的以下情况:1.是一个数字,但是1..是两个由1作为数字和{{ 1}}作为运算符。

Wolfram语言中数字的定义非常复杂(我在末尾附加了JFlex代码),并且在深度嵌套的构造中基本上需要..运算符。但是,JFlex似乎仅在“规则”的基础上支持否定的提前查询,这意味着我将需要手动扩展定义。

因此,我们希望数字不要吃(?!...),而后面紧跟另一个.,因为在Wolfram语言中,这两个点被解析为运算符叹气

我有prepared an example,基本上将整个数字表示为普通的正则表达式,包括否定的前瞻性,并且包含示例号。

有人可以告诉我如何在JFlex中做到这一点吗?

img

这是相关的JFlex代码,并且完整的定义可用here

.

1 个答案:

答案 0 :(得分:2)

目前尚不清楚在您的情况下这是否可行,但是我对此类问题的第一反应通常是尝试将其从词法分析器上移至一个级别。即而不是词法分析器标记NUMBER,我将返回数字的组成部分,例如{Digits}".""^^"等,然后将它们放到解析器的语法(如果有)中,或者放在调用词法分析器的解析引擎中。

最常见的顶部LR或LL引擎可以更好地处理前瞻性和上下文,即在您的示例中,Base以下的所有内容可能已进入解析器而不是词法分析器。

至少,如果您想进一步利用数字的值进行计算,则无论如何都需要对匹配的文本进行更详细的分析,因为它非常复杂,因此从这个角度讲,您不会输任何东西。