Het matchen van nummers is inderdaad niet helemaal 100 in de java lexer; dit zijn de huidige rules:
code:
1
2
3
4
5
6
7
| dig [0-9]
intpostfix [Ll]
num1 [\-+]?[1-9]{dig}*({intpostfix}|(\.([eE][\-+]?{dig}+)?[fF]?))?
num2 [\-+]?([1-9]{dig}*)?\.{dig}+([eE][\-+]?{dig}+)?[fF]?
hexnum [\-+]?0[xX]{hexdig}+{intpostfix}?
octnum [\-+]?0[0-7]*{intpostfix}?
number {num1}|{num2}|{hexnum}|{octnum} |
Je ziet hier al dat 1e-10 niet matched. Integer 0 wordt gematched als octaal, en 0.0 in feite als een octaal nummer ( 0 ) gevolgd door een float ( .0 )
Dit lijkt mij al beter:
code:
1
2
3
4
5
6
7
8
9
10
| dig [0-9]
long [Ll]
double [Dd]
float [Ff]
exp [Ee]
int [\-+]?([1-9]{dig}*|0)({long}|{exp}[\-+]?{dig}+)?
float [\-+]?([1-9]{dig}*|0)?\.{dig}*({exp}[\-+]?{dig}+)?({double}|{float})?
hexnum [\-+]?0[xX]{hexdig}+{long}?
octnum [\-+]?0[0-7]*{long}?
number {int}|{float}|{hexnum}|{octnum} |
maar misschien kan iemand anders ook even kijken of dat wel volledig is
edit: mmz, ik vergeet dat 1F en 1e357D ook geldig zijn... morgen nog maar eens kijken
[
Voor 15% gewijzigd door
crisp op 05-08-2005 00:44
]