2016-04-15 5 views
1

Ich habe die folgenden Sätze:regex für eine reelle Zahl in flex ignoriert führende Nullen

NUMBER [0-9]+ 
DECIMAL ("."{NUMBER})|({NUMBER}("."{NUMBER}?)?) 
REAL {DECIMAL}([eE][+-]?{NUMBER})? 

und ich möchte, dass meine Lexer reelle Zahlen wie akzeptieren: 0.002 oder 0.004e-10 oder .01

das Problem ist, dass ich möchte, dass die führenden Nullen zu ignorieren, sondern den Rest der Nummer zum Beispiel:

wenn ich 000.0002 geben möchte ich 0,0002 behalten und wenn ich 0,2e-0100 geben möchte ich 0,2e behalten -100

Also dachte ich etwas wie die Atof-Funktion, aber ich weiß nicht, wie es genau geht.

Irgendwelche Gedanken?

Viele Dank im Voraus

Antwort

1

lex wird die vollständigen Token zurück, die Ihr Muster als eine Zeichenfolge übereinstimmt. Sie können nicht ändern, dass. Auf Kosten von erheblicher Komplexität Sie Startbedingungen verwenden könnte eine führende Null entsprechen (die die einzige Ziffer sein kann), und sammeln Tokens für die Stücke, zum Beispiel

0.2e-0100 

als

0.2e- 
0 
100 

und kleben Sie die ersten/letzten Token zusammen, aber Sie würden es viel einfacher finden, Ihre eigene Schnurfunktion zu entwickeln, die die unerwünschten führenden Nullen herausfiltert.