diff options
author | Marius Kintel <marius@kintel.net> | 2011-11-05 15:22:48 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2011-11-05 15:22:48 (GMT) |
commit | 04bc3ed890451de881034fee9f000761c4f0e068 (patch) | |
tree | 060a7df5be3ad9aec2ec6cfd0795800ff581f232 | |
parent | 5ff79c6393acd2fa4143f340f95646c07d357007 (diff) |
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
-rw-r--r-- | src/lexer.l | 9 | ||||
-rw-r--r-- | testdata/scad/misc/parser-tests.scad | 7 |
2 files changed, 13 insertions, 3 deletions
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(); } <string>{ 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); |