diff options
author | Li Jin <dragon-fly@qq.com> | 2020-08-20 09:46:49 +0800 |
---|---|---|
committer | Li Jin <dragon-fly@qq.com> | 2020-08-20 09:46:49 +0800 |
commit | eba73a696c65932534fd5aefbe2ca4c7260c0fb6 (patch) | |
tree | 1a6f740439713b809f4f97a117deaff5b0b57468 | |
parent | 1afca4888b2ee8e49c2e4d0bef478d0728d5ed41 (diff) | |
download | yuescript-eba73a696c65932534fd5aefbe2ca4c7260c0fb6.tar.gz yuescript-eba73a696c65932534fd5aefbe2ca4c7260c0fb6.tar.bz2 yuescript-eba73a696c65932534fd5aefbe2ca4c7260c0fb6.zip |
reserve the same Moonscript coma separated expressions behaviors.
-rw-r--r-- | spec/inputs/syntax.moon | 22 | ||||
-rw-r--r-- | spec/inputs/whitespace.moon | 42 | ||||
-rw-r--r-- | src/MoonP/moon_compiler.cpp | 2 | ||||
-rw-r--r-- | src/MoonP/moon_parser.cpp | 21 | ||||
-rw-r--r-- | src/MoonP/moon_parser.h | 1 |
5 files changed, 45 insertions, 43 deletions
diff --git a/spec/inputs/syntax.moon b/spec/inputs/syntax.moon index 9895c44..4435a1e 100644 --- a/spec/inputs/syntax.moon +++ b/spec/inputs/syntax.moon | |||
@@ -291,13 +291,13 @@ It's OK. | |||
291 | func --[[port]] 3000, --[[ip]] "192.168.1.1" | 291 | func --[[port]] 3000, --[[ip]] "192.168.1.1" |
292 | 292 | ||
293 | f = -> | 293 | f = -> |
294 | a,b, | 294 | a,b, \ |
295 | c,d, | 295 | c,d, \ |
296 | e,f | 296 | e,f |
297 | 297 | ||
298 | f = -> | 298 | f = -> |
299 | a,b | 299 | a,b \ |
300 | ,c,d | 300 | ,c,d \ |
301 | ,e,f | 301 | ,e,f |
302 | 302 | ||
303 | with obj | 303 | with obj |
@@ -369,13 +369,13 @@ do | |||
369 | a = f2! | 369 | a = f2! |
370 | - 1 |> f2 | 370 | - 1 |> f2 |
371 | 371 | ||
372 | _1 | 372 | _1 \ |
373 | ,_2 | 373 | ,_2 \ |
374 | ,_3 | 374 | ,_3 \ |
375 | ,_4 = 1 | 375 | ,_4 = 1 \ |
376 | ,f 2 | 376 | ,f 2 \ |
377 | ,3 | 377 | ,3 \ |
378 | ,f 4, | 378 | ,f 4, \ |
379 | 4 | 379 | 4 |
380 | 380 | ||
381 | nil | 381 | nil |
diff --git a/spec/inputs/whitespace.moon b/spec/inputs/whitespace.moon index 06ce4eb..329280f 100644 --- a/spec/inputs/whitespace.moon +++ b/spec/inputs/whitespace.moon | |||
@@ -100,41 +100,41 @@ c(one, two, | |||
100 | -- | 100 | -- |
101 | 101 | ||
102 | v = -> | 102 | v = -> |
103 | a, -- v1 | 103 | a, \-- v1 |
104 | b, -- v2 | 104 | b, \-- v2 |
105 | c -- v3 | 105 | c -- v3 |
106 | 106 | ||
107 | v1, v2, | 107 | v1, v2, \ |
108 | v3 = -> | 108 | v3 = -> |
109 | a; -- end of function for v1 | 109 | a; \-- end of function for v1 |
110 | b, -- v2 | 110 | b, \-- v2 |
111 | c -- v3 | 111 | c -- v3 |
112 | 112 | ||
113 | a, b, | 113 | a, b, \ |
114 | c, d, | 114 | c, d, \ |
115 | e, f = 1, | 115 | e, f = 1, \ |
116 | f2 | 116 | f2 |
117 | :abc; -- arg2 | 117 | :abc; \-- arg2 |
118 | 3, | 118 | 3, \ |
119 | 4, | 119 | 4, \ |
120 | f5 abc; -- arg5 | 120 | f5 abc; \-- arg5 |
121 | 6 | 121 | 6 |
122 | 122 | ||
123 | for a, -- destruct 1 | 123 | for a, \-- destruct 1 |
124 | b, -- destruct 2 | 124 | b, \-- destruct 2 |
125 | --[[destruct 3]] c | 125 | --[[destruct 3]] c \ |
126 | in pairs tb | 126 | in pairs tb |
127 | print a, | 127 | print a, \ |
128 | b, | 128 | b, \ |
129 | c | 129 | c |
130 | 130 | ||
131 | for i = 1, -- initial | 131 | for i = 1, \-- initial |
132 | 10, -- stop | 132 | 10, \-- stop |
133 | -1 -- step | 133 | -1 -- step |
134 | print i | 134 | print i |
135 | 135 | ||
136 | local a, | 136 | local a,\ |
137 | b, | 137 | b,\ |
138 | c | 138 | c |
139 | 139 | ||
140 | nil | 140 | nil |
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp index cac4ad0..2f16fff 100644 --- a/src/MoonP/moon_compiler.cpp +++ b/src/MoonP/moon_compiler.cpp | |||
@@ -49,7 +49,7 @@ inline std::string s(std::string_view sv) { | |||
49 | } | 49 | } |
50 | 50 | ||
51 | const std::string_view version() { | 51 | const std::string_view version() { |
52 | return "0.4.9"sv; | 52 | return "0.4.10"sv; |
53 | } | 53 | } |
54 | 54 | ||
55 | // name of table stored in lua registry | 55 | // name of table stored in lua registry |
diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp index d30d6b5..a13a779 100644 --- a/src/MoonP/moon_parser.cpp +++ b/src/MoonP/moon_parser.cpp | |||
@@ -43,7 +43,8 @@ MoonParser::MoonParser() { | |||
43 | multi_line_close = expr("]]"); | 43 | multi_line_close = expr("]]"); |
44 | multi_line_content = *(not_(multi_line_close) >> Any); | 44 | multi_line_content = *(not_(multi_line_close) >> Any); |
45 | MultiLineComment = multi_line_open >> multi_line_content >> multi_line_close; | 45 | MultiLineComment = multi_line_open >> multi_line_content >> multi_line_close; |
46 | space_one = set(" \t") | MultiLineComment; | 46 | EscapeNewLine = expr('\\') >> *(set(" \t") | MultiLineComment) >> -Comment >> Break; |
47 | space_one = set(" \t") | and_(set("-\\")) >> (MultiLineComment | EscapeNewLine); | ||
47 | Space = *space_one >> -Comment; | 48 | Space = *space_one >> -Comment; |
48 | SpaceBreak = Space >> Break; | 49 | SpaceBreak = Space >> Break; |
49 | White = Space >> *(Break >> Space); | 50 | White = Space >> *(Break >> Space); |
@@ -241,8 +242,8 @@ MoonParser::MoonParser() { | |||
241 | While = key("while") >> DisableDo >> ensure(Exp, PopDo) >> -key("do") >> Body; | 242 | While = key("while") >> DisableDo >> ensure(Exp, PopDo) >> -key("do") >> Body; |
242 | Repeat = key("repeat") >> Body >> Break >> *EmptyLine >> CheckIndent >> key("until") >> Exp; | 243 | Repeat = key("repeat") >> Body >> Break >> *EmptyLine >> CheckIndent >> key("until") >> Exp; |
243 | 244 | ||
244 | for_step_value = sym(',') >> White >> Exp; | 245 | for_step_value = sym(',') >> Exp; |
245 | for_args = Space >> Variable >> sym('=') >> Exp >> sym(',') >> White >> Exp >> -for_step_value; | 246 | for_args = Space >> Variable >> sym('=') >> Exp >> sym(',') >> Exp >> -for_step_value; |
246 | 247 | ||
247 | For = key("for") >> DisableDo >> | 248 | For = key("for") >> DisableDo >> |
248 | ensure(for_args, PopDo) >> | 249 | ensure(for_args, PopDo) >> |
@@ -250,7 +251,7 @@ MoonParser::MoonParser() { | |||
250 | 251 | ||
251 | for_in = star_exp | ExpList; | 252 | for_in = star_exp | ExpList; |
252 | 253 | ||
253 | ForEach = key("for") >> AssignableNameList >> White >> key("in") >> | 254 | ForEach = key("for") >> AssignableNameList >> key("in") >> |
254 | DisableDo >> ensure(for_in, PopDo) >> | 255 | DisableDo >> ensure(for_in, PopDo) >> |
255 | -key("do") >> Body; | 256 | -key("do") >> Body; |
256 | 257 | ||
@@ -278,10 +279,10 @@ MoonParser::MoonParser() { | |||
278 | CompInner = Seperator >> (CompForEach | CompFor) >> *CompClause; | 279 | CompInner = Seperator >> (CompForEach | CompFor) >> *CompClause; |
279 | star_exp = sym('*') >> Exp; | 280 | star_exp = sym('*') >> Exp; |
280 | CompForEach = key("for") >> AssignableNameList >> key("in") >> (star_exp | Exp); | 281 | CompForEach = key("for") >> AssignableNameList >> key("in") >> (star_exp | Exp); |
281 | CompFor = key("for") >> Space >> Variable >> sym('=') >> Exp >> sym(',') >> White >> Exp >> -for_step_value; | 282 | CompFor = key("for") >> Space >> Variable >> sym('=') >> Exp >> sym(',') >> Exp >> -for_step_value; |
282 | CompClause = CompFor | CompForEach | key("when") >> Exp; | 283 | CompClause = CompFor | CompForEach | key("when") >> Exp; |
283 | 284 | ||
284 | Assign = sym('=') >> Seperator >> (With | If | Switch | TableBlock | Exp >> *(White >> set(",;") >> White >> Exp)); | 285 | Assign = sym('=') >> Seperator >> (With | If | Switch | TableBlock | Exp >> *(Space >> set(",;") >> Exp)); |
285 | 286 | ||
286 | update_op = | 287 | update_op = |
287 | expr("..") | | 288 | expr("..") | |
@@ -514,15 +515,15 @@ MoonParser::MoonParser() { | |||
514 | MacroLit = -macro_args_def >> Space >> expr("->") >> Body; | 515 | MacroLit = -macro_args_def >> Space >> expr("->") >> Body; |
515 | Macro = key("macro") >> Space >> macro_type >> Space >> Name >> sym('=') >> MacroLit; | 516 | Macro = key("macro") >> Space >> macro_type >> Space >> Name >> sym('=') >> MacroLit; |
516 | 517 | ||
517 | NameList = Seperator >> Space >> Variable >> *(sym(',') >> White >> Variable); | 518 | NameList = Seperator >> Space >> Variable >> *(sym(',') >> Space >> Variable); |
518 | NameOrDestructure = Space >> Variable | TableLit; | 519 | NameOrDestructure = Space >> Variable | TableLit; |
519 | AssignableNameList = Seperator >> NameOrDestructure >> *(sym(',') >> White >> NameOrDestructure); | 520 | AssignableNameList = Seperator >> NameOrDestructure >> *(sym(',') >> NameOrDestructure); |
520 | 521 | ||
521 | fn_arrow_back = expr('<') >> set("-="); | 522 | fn_arrow_back = expr('<') >> set("-="); |
522 | Backcall = -FnArgsDef >> Space >> fn_arrow_back >> Space >> ChainValue; | 523 | Backcall = -FnArgsDef >> Space >> fn_arrow_back >> Space >> ChainValue; |
523 | 524 | ||
524 | ExpList = Seperator >> Exp >> *(White >> expr(',') >> White >> Exp); | 525 | ExpList = Seperator >> Exp >> *(sym(',') >> Exp); |
525 | ExpListLow = Seperator >> Exp >> *(White >> set(",;") >> White >> Exp); | 526 | ExpListLow = Seperator >> Exp >> *(Space >> set(",;") >> Exp); |
526 | 527 | ||
527 | ArgLine = CheckIndent >> Exp >> *(sym(',') >> Exp); | 528 | ArgLine = CheckIndent >> Exp >> *(sym(',') >> Exp); |
528 | ArgBlock = ArgLine >> *(sym(',') >> SpaceBreak >> ArgLine) >> PopIndent; | 529 | ArgBlock = ArgLine >> *(sym(',') >> SpaceBreak >> ArgLine) >> PopIndent; |
diff --git a/src/MoonP/moon_parser.h b/src/MoonP/moon_parser.h index d7fa24b..c6a03f8 100644 --- a/src/MoonP/moon_parser.h +++ b/src/MoonP/moon_parser.h | |||
@@ -111,6 +111,7 @@ private: | |||
111 | rule multi_line_content; | 111 | rule multi_line_content; |
112 | rule MultiLineComment; | 112 | rule MultiLineComment; |
113 | rule Indent; | 113 | rule Indent; |
114 | rule EscapeNewLine; | ||
114 | rule space_one; | 115 | rule space_one; |
115 | rule Space; | 116 | rule Space; |
116 | rule SpaceBreak; | 117 | rule SpaceBreak; |