gpt4 book ai didi

regex - JFlex:正则表达式中的负前瞻

转载 作者:行者123 更新时间:2023-12-01 13:16:04 25 4
gpt4 key购买 nike

我的问题可以分解为以下可能发生在大型正则表达式中的问题:1. 是一个数字,但是 1.. 是由 组成的两个标记code>1 作为数字,.. 作为运算符。

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

所以当它后面跟着另一个 . 时,数字不会吃掉 .,因为在 Wolfram 语言中,这两个点会被解析作为运营商叹息

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

谁能告诉我如何在 JFlex 中做到这一点?

img

这里是相关的 JFlex 代码和完整的定义可用 here

Digits = [0-9]+
Digits2 = [0-9a-zA-Z]+
Base = 2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36
Number = {Digits}((\.){Digits}?)? | \.{Digits}
PrecisionNumber = {Number}`((`?){Number})?
BaseNumber = {Base} "^^" {Digits2}(\.{Digits2}?)?
BasePrecisionNumber = {BaseNumber}((`{Number}?)|(``{Number}))
ScientificInteger = {Number} "\*^"(-?){Digits}
ScientificNumber = {PrecisionNumber} "\*^"(-?){Digits}
BaseScientificNumber = {BasePrecisionNumber} "\*^"(-?){Digits}

{BaseScientificNumber}|
{BasePrecisionNumber}|
{ScientificInteger}|
{BaseNumber}|
{ScientificNumber}|
{PrecisionNumber}|
{Number} { return WLElementTypes.NUMBER; }

最佳答案

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

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

至少如果你想进一步计算数字的值,无论如何你都需要更详细地分析匹配的文本以获得数字,因为它太复杂了,所以从那个角度你不会输任何东西。

关于regex - JFlex:正则表达式中的负前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com