diff options
author | Harrison <53527582+HTV04@users.noreply.github.com> | 2022-12-01 20:11:13 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-02 09:11:13 +0800 |
commit | 44069ba29baf423d73e0d2752f0abc7df46fbbb6 (patch) | |
tree | ffc9222c3b19cc5c4543ccbd92d812a064fcf56b | |
parent | c2471402e419f3128d76ab71232958c83b80c94f (diff) | |
download | yuescript-44069ba29baf423d73e0d2752f0abc7df46fbbb6.tar.gz yuescript-44069ba29baf423d73e0d2752f0abc7df46fbbb6.tar.bz2 yuescript-44069ba29baf423d73e0d2752f0abc7df46fbbb6.zip |
Improve number literal support (#118)
-rw-r--r-- | src/yuescript/yue_parser.cpp | 16 | ||||
-rw-r--r-- | src/yuescript/yue_parser.h | 1 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/yuescript/yue_parser.cpp b/src/yuescript/yue_parser.cpp index 1ff772b..63c9162 100644 --- a/src/yuescript/yue_parser.cpp +++ b/src/yuescript/yue_parser.cpp | |||
@@ -50,13 +50,23 @@ YueParser::YueParser() { | |||
50 | EmptyLine = SpaceBreak; | 50 | EmptyLine = SpaceBreak; |
51 | AlphaNum = range('a', 'z') | range('A', 'Z') | range('0', '9') | '_'; | 51 | AlphaNum = range('a', 'z') | range('A', 'Z') | range('0', '9') | '_'; |
52 | Name = (range('a', 'z') | range('A', 'Z') | '_') >> *AlphaNum; | 52 | Name = (range('a', 'z') | range('A', 'Z') | '_') >> *AlphaNum; |
53 | num_expo = set("eE") >> -expr('-') >> num_char; | 53 | num_expo = set("eE") >> -set("+-") >> num_char; |
54 | num_expo_hex = set("pP") >> -set("+-") >> num_char; | ||
54 | lj_num = -set("uU") >> set("lL") >> set("lL"); | 55 | lj_num = -set("uU") >> set("lL") >> set("lL"); |
55 | num_char = range('0', '9') >> *(range('0', '9') | expr('_') >> and_(range('0', '9'))); | 56 | num_char = range('0', '9') >> *(range('0', '9') | expr('_') >> and_(range('0', '9'))); |
56 | num_char_hex = range('0', '9') | range('a', 'f') | range('A', 'F'); | 57 | num_char_hex = range('0', '9') | range('a', 'f') | range('A', 'F'); |
57 | num_lit = num_char_hex >> *(num_char_hex | expr('_') >> and_(num_char_hex)); | 58 | num_lit = num_char_hex >> *(num_char_hex | expr('_') >> and_(num_char_hex)); |
58 | Num = ( | 59 | Num = ( |
59 | "0x" >> +num_lit >> -lj_num | 60 | "0x." >> +num_lit >> -num_expo_hex |
61 | ) | ( | ||
62 | "0x" >> +num_lit >> ( | ||
63 | '.' >> +num_lit >> -num_expo_hex | | ||
64 | num_expo_hex | | ||
65 | lj_num | | ||
66 | true_() | ||
67 | ) | ||
68 | ) | ( | ||
69 | '.' >> +num_char >> -num_expo | ||
60 | ) | ( | 70 | ) | ( |
61 | +num_char >> ( | 71 | +num_char >> ( |
62 | '.' >> +num_char >> -num_expo | | 72 | '.' >> +num_char >> -num_expo | |
@@ -64,8 +74,6 @@ YueParser::YueParser() { | |||
64 | lj_num | | 74 | lj_num | |
65 | true_() | 75 | true_() |
66 | ) | 76 | ) |
67 | ) | ( | ||
68 | '.' >> +num_char >> -num_expo | ||
69 | ); | 77 | ); |
70 | 78 | ||
71 | Cut = false_(); | 79 | Cut = false_(); |
diff --git a/src/yuescript/yue_parser.h b/src/yuescript/yue_parser.h index a4ecafd..c37894c 100644 --- a/src/yuescript/yue_parser.h +++ b/src/yuescript/yue_parser.h | |||
@@ -123,6 +123,7 @@ private: | |||
123 | rule num_char_hex; | 123 | rule num_char_hex; |
124 | rule num_lit; | 124 | rule num_lit; |
125 | rule num_expo; | 125 | rule num_expo; |
126 | rule num_expo_hex; | ||
126 | rule lj_num; | 127 | rule lj_num; |
127 | rule plain_space; | 128 | rule plain_space; |
128 | rule Break; | 129 | rule Break; |