Support for floating point literals.
This commit is contained in:
parent
8c813602d4
commit
ad80fc5130
|
@ -22,7 +22,6 @@
|
||||||
#include "Parser.hpp"
|
#include "Parser.hpp"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstdlib>
|
|
||||||
|
|
||||||
static void meta(const char *);
|
static void meta(const char *);
|
||||||
|
|
||||||
|
@ -191,10 +190,17 @@ CHAR [a-zA-Z_]
|
||||||
return token::ID;
|
return token::ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
{DIGIT}+ {
|
[-+]?(({DIGIT}*".")?{DIGIT}+|{DIGIT}+".")([eE][-+]?{DIGIT}+)? {
|
||||||
lval->intval = strtol(yytext, NULL, 10);
|
std::string value(yytext);
|
||||||
|
|
||||||
|
if (value.find(".") != std::string::npos) {
|
||||||
|
lval->floatval = std::stod(value);
|
||||||
|
return token::FLOAT;
|
||||||
|
} else {
|
||||||
|
lval->intval = std::stol(value);
|
||||||
return token::NUMBER;
|
return token::NUMBER;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
<INITIAL,shift>. {
|
<INITIAL,shift>. {
|
||||||
return token::ERROR;
|
return token::ERROR;
|
||||||
|
|
12
examples/float.mc
Normal file
12
examples/float.mc
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Test all possible numerical forms (integer and float)
|
||||||
|
|
||||||
|
Lei ha clacsonato
|
||||||
|
|
||||||
|
2.0 a posterdati
|
||||||
|
-2.0 a posterdati
|
||||||
|
2. a posterdati
|
||||||
|
.232 a posterdati
|
||||||
|
-2 a posterdati
|
||||||
|
-.2233 a posterdati
|
||||||
|
+2 a posterdati
|
||||||
|
+2.233e-23 a posterdati
|
Reference in New Issue
Block a user