diff options
Diffstat (limited to '')
| -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 = |
