Моя проблема может быть разбита на следующее, что может происходить внутри большого регулярного выражения: 1.
- это число, но 1..
- это два токена, состоящих из 1
как числа и ..
как оператора.
Определение числа в языке Wolfram Language очень сложно (я добавляю код JFlex в конце), и мне в основном нужен оператор (?!...)
в глубоко вложенной конструкции.Тем не менее, JFlex, похоже, поддерживает негативную перспективу только на основе «Правил», что означает, что мне нужно будет расширить свои определения вручную.
Так что нужно, чтобы числа не ели .
, когда за ним следует еще один .
, потому что в языке Вольфрама две точки затем анализируются как оператор sigh.
У меня подготовлен пример , который в основном показывает все числовое представление в виде обычного регулярного выражения, включает в себя отрицательный прогноз и содержит числа примеров.
Может кто-нибудь сказать мне, как я могу сделать это в JFlex?
Вот соответствующий код JFlex и полные определения доступны здесь
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; }