diff options
Diffstat (limited to 'src/MoonP/moon_parser.cpp')
-rw-r--r-- | src/MoonP/moon_parser.cpp | 15 |
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; | |||
289 | rule exp_op_value = Space >> BinaryOperator >> *SpaceBreak >> Value; | 289 | rule exp_op_value = Space >> BinaryOperator >> *SpaceBreak >> Value; |
290 | rule Exp = Value >> *exp_op_value; | 290 | rule Exp = Value >> *exp_op_value; |
291 | 291 | ||
292 | extern rule Chain, Callable, InvokeArgs; | 292 | extern rule Chain, Callable, InvokeArgs, existential_op; |
293 | 293 | ||
294 | rule ChainValue = Seperator >> (Chain | Callable) >> -InvokeArgs; | 294 | rule ChainValue = Seperator >> (Chain | Callable) >> -existential_op >> -InvokeArgs; |
295 | 295 | ||
296 | extern rule KeyValue, String, SimpleValue; | 296 | extern rule KeyValue, String, SimpleValue; |
297 | 297 | ||
@@ -345,9 +345,10 @@ rule FnArgs = (symx('(') >> *SpaceBreak >> -FnArgsExpList >> *SpaceBreak >> sym( | |||
345 | 345 | ||
346 | extern rule ChainItems, DotChainItem, ColonChain; | 346 | extern rule ChainItems, DotChainItem, ColonChain; |
347 | 347 | ||
348 | rule chain_call = (Callable | String) >> ChainItems; | 348 | rule existential_op = expr('?'); |
349 | rule chain_call = (Callable | String) >> -existential_op >> ChainItems; | ||
349 | rule chain_item = and_(set(".\\")) >> ChainItems; | 350 | rule chain_item = and_(set(".\\")) >> ChainItems; |
350 | rule chain_dot_chain = DotChainItem >> -ChainItems; | 351 | rule chain_dot_chain = DotChainItem >> -existential_op >> -ChainItems; |
351 | 352 | ||
352 | rule Chain = chain_call | chain_item | | 353 | rule 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; | |||
362 | extern rule Invoke, Slice; | 363 | extern rule Invoke, Slice; |
363 | 364 | ||
364 | rule Index = symx('[') >> Exp >> sym(']'); | 365 | rule Index = symx('[') >> Exp >> sym(']'); |
365 | rule ChainItem = Invoke | DotChainItem | Slice | Index; | 366 | rule ChainItem = Invoke >> -existential_op | DotChainItem >> -existential_op | Slice | Index >> -existential_op; |
366 | rule DotChainItem = symx('.') >> Name; | 367 | rule DotChainItem = symx('.') >> Name; |
367 | rule ColonChainItem = symx('\\') >> (LuaKeyword | Name); | 368 | rule ColonChainItem = symx('\\') >> (LuaKeyword | Name); |
368 | rule invoke_chain = Invoke >> -ChainItems; | 369 | rule invoke_chain = Invoke >> -existential_op >> -ChainItems; |
369 | rule ColonChain = ColonChainItem >> -invoke_chain; | 370 | rule ColonChain = ColonChainItem >> -existential_op >> -invoke_chain; |
370 | 371 | ||
371 | rule default_value = true_(); | 372 | rule default_value = true_(); |
372 | rule Slice = | 373 | rule Slice = |