aboutsummaryrefslogtreecommitdiff
path: root/src/MoonP/moon_parser.cpp
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-10-15 18:00:47 +0800
committerLi Jin <dragon-fly@qq.com>2020-10-15 18:00:47 +0800
commit0777356cbe599b3f88bdfa476e3ffa64bb3a3a8c (patch)
tree9157e07408ecda84ee65f5db36db917fa688e1ad /src/MoonP/moon_parser.cpp
parent46f6429cd61315efd337346559598c855e29f921 (diff)
downloadyuescript-0777356cbe599b3f88bdfa476e3ffa64bb3a3a8c.tar.gz
yuescript-0777356cbe599b3f88bdfa476e3ffa64bb3a3a8c.tar.bz2
yuescript-0777356cbe599b3f88bdfa476e3ffa64bb3a3a8c.zip
add a new macro type support to insert raw codes to output.
Diffstat (limited to 'src/MoonP/moon_parser.cpp')
-rw-r--r--src/MoonP/moon_parser.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp
index 6485e46..e984997 100644
--- a/src/MoonP/moon_parser.cpp
+++ b/src/MoonP/moon_parser.cpp
@@ -51,22 +51,19 @@ MoonParser::MoonParser() {
51 EmptyLine = SpaceBreak; 51 EmptyLine = SpaceBreak;
52 AlphaNum = range('a', 'z') | range('A', 'Z') | range('0', '9') | '_'; 52 AlphaNum = range('a', 'z') | range('A', 'Z') | range('0', '9') | '_';
53 Name = (range('a', 'z') | range('A', 'Z') | '_') >> *AlphaNum; 53 Name = (range('a', 'z') | range('A', 'Z') | '_') >> *AlphaNum;
54 Decimal = ( 54 Num = (
55 "0x" >>
56 +(range('0', '9') | range('a', 'f') | range('A', 'F')) >>
57 -(-set("uU") >> set("lL") >> set("lL"))
58 ) | (
59 +range('0', '9') >> -set("uU") >> set("lL") >> set("lL")
60 ) | (
55 ( 61 (
56 +range('0', '9') >> -('.' >> +range('0', '9')) 62 +range('0', '9') >> -('.' >> +range('0', '9'))
57 ) | ( 63 ) | (
58 '.' >> +range('0', '9') 64 '.' >> +range('0', '9')
59 ) 65 )
60 ) >> -(set("eE") >> -expr('-') >> +range('0', '9')); 66 ) >> -(set("eE") >> -expr('-') >> +range('0', '9'));
61 Integer =
62 (
63 "0x" >>
64 +(range('0', '9') | range('a', 'f') | range('A', 'F')) >>
65 -(-set("uU") >> set("lL") >> set("lL"))
66 ) | (
67 +range('0', '9') >> -set("uU") >> set("lL") >> set("lL")
68 );
69 Num = Integer | Decimal;
70 67
71 Cut = false_(); 68 Cut = false_();
72 Seperator = true_(); 69 Seperator = true_();
@@ -513,7 +510,7 @@ MoonParser::MoonParser() {
513 FunLit = -FnArgsDef >> Space >> fn_arrow >> -Body; 510 FunLit = -FnArgsDef >> Space >> fn_arrow >> -Body;
514 511
515 MacroName = expr('$') >> Name; 512 MacroName = expr('$') >> Name;
516 macro_type = expr("expr") | expr("block") | expr("lua"); 513 macro_type = expr("expr") | expr("block") | expr("lua") | expr("text");
517 macro_args_def = sym('(') >> White >> -FnArgDefList >> White >> sym(')'); 514 macro_args_def = sym('(') >> White >> -FnArgDefList >> White >> sym(')');
518 MacroLit = -macro_args_def >> Space >> expr("->") >> Body; 515 MacroLit = -macro_args_def >> Space >> expr("->") >> Body;
519 Macro = key("macro") >> Space >> macro_type >> Space >> Name >> sym('=') >> MacroLit; 516 Macro = key("macro") >> Space >> macro_type >> Space >> Name >> sym('=') >> MacroLit;