Regex ANTLR v4:解析XSD数据类型

Regex ANTLR v4:解析XSD数据类型,regex,xsd,antlr,antlr4,Regex,Xsd,Antlr,Antlr4,我正在编写一个程序,用于将XML模式(XSD)文件自动映射到ANTLR v4语法文件 为了实现它,我必须找到一个内置XSD类型的映射,比如int、double、string,基本上可以找到任何类型 以字节为例,它们可以有三种不同的符号(+、-、none)和127到-128之间的值。尝试将其与ANTLR lexer规则相匹配已经是一件痛苦的事情,从上面的示例中可以看出。要匹配0(或00或000)和127之间的数字,我们需要 ^(0?[0-9]?[0-9]| 1[01][0-9]| 12[0-7])

我正在编写一个程序,用于将XML模式(XSD)文件自动映射到ANTLR v4语法文件

为了实现它,我必须找到一个内置XSD类型的映射,比如int、double、string,基本上可以找到任何类型

以字节为例,它们可以有三种不同的符号(+、-、none)和127到-128之间的值。尝试将其与ANTLR lexer规则相匹配已经是一件痛苦的事情,从上面的示例中可以看出。要匹配0(或00或000)和127之间的数字,我们需要

^(0?[0-9]?[0-9]| 1[01][0-9]| 12[0-7])$


这甚至还不包括负数的情况,负数的数值会上升到128。对int或double值执行此操作似乎非常费劲。有没有更简单的方法来实现这一点?

数字范围和正则表达式不能齐头并进。正则表达式在匹配模式时非常聪明。但匹配数字范围是愚蠢的。您将不得不通过比当前更长的时间来教授它范围匹配,回头看它将是乏味和混乱的。在lexer中,您只需匹配所有整数值:
integer:[0-9]+。语义分析应该在之后进行(在分析过程中/在访问者内部)