summaryrefslogtreecommitdiff
path: root/src/wast-lexer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/wast-lexer.cc')
-rw-r--r--src/wast-lexer.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/wast-lexer.cc b/src/wast-lexer.cc
index 342a31b2..0c4c3bd0 100644
--- a/src/wast-lexer.cc
+++ b/src/wast-lexer.cc
@@ -284,8 +284,8 @@ int WastLexer::GetToken(Token* lval, Location* loc, WastParser* parser) {
digit = [0-9];
hexdigit = [0-9a-fA-F];
- num = digit+;
- hexnum = hexdigit+;
+ num = digit ("_"? digit)*;
+ hexnum = hexdigit ("_"? hexdigit)*;
letter = [a-zA-Z];
symbol = [+\-*\\/^~=<>!?@#$%&|:`.'];
character = [^"\\\x00-\x1f]
@@ -294,12 +294,15 @@ int WastLexer::GetToken(Token* lval, Location* loc, WastParser* parser) {
sign = [+-];
nat = num | "0x" hexnum;
int = sign nat;
- hexfloat = sign? "0x" hexnum ("." hexdigit*)? "p" sign? num;
+ frac = num;
+ hexfrac = hexnum;
+ hexfloat = sign? "0x" hexnum "." hexfrac?
+ | sign? "0x" hexnum ("." hexfrac?)? [pP] sign? num;
infinity = sign? "inf";
nan = sign? "nan"
| sign? "nan:0x" hexnum;
- float = sign? num "." digit*
- | sign? num ("." digit*)? [eE] sign? num;
+ float = sign? num "." frac?
+ | sign? num ("." frac?)? [eE] sign? num;
text = '"' character* '"';
name = "$" (letter | digit | "_" | symbol)+;