aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarrison <53527582+HTV04@users.noreply.github.com>2022-12-01 20:11:13 -0500
committerGitHub <noreply@github.com>2022-12-02 09:11:13 +0800
commit44069ba29baf423d73e0d2752f0abc7df46fbbb6 (patch)
treeffc9222c3b19cc5c4543ccbd92d812a064fcf56b
parentc2471402e419f3128d76ab71232958c83b80c94f (diff)
downloadyuescript-44069ba29baf423d73e0d2752f0abc7df46fbbb6.tar.gz
yuescript-44069ba29baf423d73e0d2752f0abc7df46fbbb6.tar.bz2
yuescript-44069ba29baf423d73e0d2752f0abc7df46fbbb6.zip
Improve number literal support (#118)
-rw-r--r--src/yuescript/yue_parser.cpp16
-rw-r--r--src/yuescript/yue_parser.h1
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;