aboutsummaryrefslogtreecommitdiff
path: root/src/MoonP/moon_parser.cpp
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-01-18 18:15:24 +0800
committerLi Jin <dragon-fly@qq.com>2020-01-18 18:15:24 +0800
commit8d1af508f4173e4af6a4ea98584c1a86619f6a20 (patch)
tree0264c4b01f1152d8114cf46aea6fd773276c0b01 /src/MoonP/moon_parser.cpp
parentf53ccb373efbf6f6f40284111df309e351c2c18f (diff)
downloadyuescript-8d1af508f4173e4af6a4ea98584c1a86619f6a20.tar.gz
yuescript-8d1af508f4173e4af6a4ea98584c1a86619f6a20.tar.bz2
yuescript-8d1af508f4173e4af6a4ea98584c1a86619f6a20.zip
fix Moonscript issue 122, add support for ? operator.
Diffstat (limited to 'src/MoonP/moon_parser.cpp')
-rw-r--r--src/MoonP/moon_parser.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp
index 1005463..7cc4129 100644
--- a/src/MoonP/moon_parser.cpp
+++ b/src/MoonP/moon_parser.cpp
@@ -289,9 +289,9 @@ extern rule Value;
289rule exp_op_value = Space >> BinaryOperator >> *SpaceBreak >> Value; 289rule exp_op_value = Space >> BinaryOperator >> *SpaceBreak >> Value;
290rule Exp = Value >> *exp_op_value; 290rule Exp = Value >> *exp_op_value;
291 291
292extern rule Chain, Callable, InvokeArgs; 292extern rule Chain, Callable, InvokeArgs, existential_op;
293 293
294rule ChainValue = Seperator >> (Chain | Callable) >> -InvokeArgs; 294rule ChainValue = Seperator >> (Chain | Callable) >> -existential_op >> -InvokeArgs;
295 295
296extern rule KeyValue, String, SimpleValue; 296extern rule KeyValue, String, SimpleValue;
297 297
@@ -345,9 +345,10 @@ rule FnArgs = (symx('(') >> *SpaceBreak >> -FnArgsExpList >> *SpaceBreak >> sym(
345 345
346extern rule ChainItems, DotChainItem, ColonChain; 346extern rule ChainItems, DotChainItem, ColonChain;
347 347
348rule chain_call = (Callable | String) >> ChainItems; 348rule existential_op = expr('?');
349rule chain_call = (Callable | String) >> -existential_op >> ChainItems;
349rule chain_item = and_(set(".\\")) >> ChainItems; 350rule chain_item = and_(set(".\\")) >> ChainItems;
350rule chain_dot_chain = DotChainItem >> -ChainItems; 351rule chain_dot_chain = DotChainItem >> -existential_op >> -ChainItems;
351 352
352rule Chain = chain_call | chain_item | 353rule Chain = chain_call | chain_item |
353 Space >> (chain_dot_chain | ColonChain); 354 Space >> (chain_dot_chain | ColonChain);
@@ -362,11 +363,11 @@ rule ChainItems = chain_with_colon | ColonChain;
362extern rule Invoke, Slice; 363extern rule Invoke, Slice;
363 364
364rule Index = symx('[') >> Exp >> sym(']'); 365rule Index = symx('[') >> Exp >> sym(']');
365rule ChainItem = Invoke | DotChainItem | Slice | Index; 366rule ChainItem = Invoke >> -existential_op | DotChainItem >> -existential_op | Slice | Index >> -existential_op;
366rule DotChainItem = symx('.') >> Name; 367rule DotChainItem = symx('.') >> Name;
367rule ColonChainItem = symx('\\') >> (LuaKeyword | Name); 368rule ColonChainItem = symx('\\') >> (LuaKeyword | Name);
368rule invoke_chain = Invoke >> -ChainItems; 369rule invoke_chain = Invoke >> -existential_op >> -ChainItems;
369rule ColonChain = ColonChainItem >> -invoke_chain; 370rule ColonChain = ColonChainItem >> -existential_op >> -invoke_chain;
370 371
371rule default_value = true_(); 372rule default_value = true_();
372rule Slice = 373rule Slice =