From 04bc3ed890451de881034fee9f000761c4f0e068 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sat, 5 Nov 2011 16:22:48 +0100 Subject: Added support for parsing numbers in scientific notation, e.g. to allow roundtripping of written csg files as well as parsing of externally generated scad files diff --git a/src/lexer.l b/src/lexer.l index d9ccd76..2760b07 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -88,7 +88,8 @@ QString filepath; %x comment string %x include -DIGIT [0-9] +D [0-9] +E [Ee][+-]?{D}+ %% @@ -155,8 +156,10 @@ use[ \t\r\n>]*"<"[^\t\r\n>]+">" { "false" return TOK_FALSE; "undef" return TOK_UNDEF; -{DIGIT}+|{DIGIT}*\.{DIGIT}+|{DIGIT}+\.{DIGIT}* { parserlval.number = QString(yytext).toDouble(); return TOK_NUMBER; } -"$"?[a-zA-Z0-9_]+ { parserlval.text = strdup(yytext); return TOK_ID; } +{D}+{E}? | +{D}*\.{D}+{E}? | +{D}+\.{D}*{E}? { parserlval.number = QString(yytext).toDouble(); return TOK_NUMBER; } +"$"?[a-zA-Z0-9_]+ { parserlval.text = strdup(yytext); return TOK_ID; } \" { BEGIN(string); stringcontents = new QString(); } { diff --git a/testdata/scad/misc/parser-tests.scad b/testdata/scad/misc/parser-tests.scad new file mode 100644 index 0000000..03cbded --- /dev/null +++ b/testdata/scad/misc/parser-tests.scad @@ -0,0 +1,7 @@ +// Number literals + +a = .1; echo(a); +b = 2.; echo(b); +c = 11e+2; echo(c); +d = 21.e-3; echo(d); +e = .11e-12; echo(e); -- cgit v0.10.1