diff options
author | Li Jin <dragon-fly@qq.com> | 2020-10-15 18:00:47 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2020-10-15 18:00:47 +0800 |
commit | 0777356cbe599b3f88bdfa476e3ffa64bb3a3a8c (patch) | |
tree | 9157e07408ecda84ee65f5db36db917fa688e1ad /src/MoonP/moon_parser.cpp | |
parent | 46f6429cd61315efd337346559598c855e29f921 (diff) | |
download | yuescript-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.cpp | 19 |
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; |