diff options
Diffstat (limited to '')
| -rw-r--r-- | src/MoonP/moon_parser.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/MoonP/moon_parser.cpp b/src/MoonP/moon_parser.cpp index 2d71567..25e67b3 100644 --- a/src/MoonP/moon_parser.cpp +++ b/src/MoonP/moon_parser.cpp | |||
| @@ -292,6 +292,25 @@ MoonParser::MoonParser() { | |||
| 292 | 292 | ||
| 293 | Update = Space >> update_op >> expr("=") >> Exp; | 293 | Update = Space >> update_op >> expr("=") >> Exp; |
| 294 | 294 | ||
| 295 | Assignable = AssignableChain | Space >> Variable | Space >> SelfName; | ||
| 296 | |||
| 297 | unary_value = unary_operator >> *(Space >> unary_operator) >> Value; | ||
| 298 | |||
| 299 | ExponentialOperator = expr('^'); | ||
| 300 | expo_value = Space >> ExponentialOperator >> *SpaceBreak >> Value; | ||
| 301 | expo_exp = Value >> *expo_value; | ||
| 302 | |||
| 303 | unary_operator = | ||
| 304 | expr('-') >> not_(expr('>') | space_one) | | ||
| 305 | expr('#') | | ||
| 306 | expr('~') >> not_(space_one) | | ||
| 307 | expr("not") >> not_(AlphaNum); | ||
| 308 | unary_exp = *(Space >> unary_operator) >> expo_exp; | ||
| 309 | |||
| 310 | BackcallOperator = expr("|>"); | ||
| 311 | backcall_value = Space >> BackcallOperator >> *SpaceBreak >> unary_exp; | ||
| 312 | backcall_exp = unary_exp >> *backcall_value; | ||
| 313 | |||
| 295 | BinaryOperator = | 314 | BinaryOperator = |
| 296 | (expr("or") >> not_(AlphaNum)) | | 315 | (expr("or") >> not_(AlphaNum)) | |
| 297 | (expr("and") >> not_(AlphaNum)) | | 316 | (expr("and") >> not_(AlphaNum)) | |
| @@ -304,14 +323,9 @@ MoonParser::MoonParser() { | |||
| 304 | expr("<<") | | 323 | expr("<<") | |
| 305 | expr(">>") | | 324 | expr(">>") | |
| 306 | expr("//") | | 325 | expr("//") | |
| 307 | set("+-*/%^><|&~"); | 326 | set("+-*/%><|&~"); |
| 308 | 327 | exp_op_value = Space >> BinaryOperator >> *SpaceBreak >> backcall_exp; | |
| 309 | BackcallOperator = expr("|>"); | 328 | Exp = Seperator >> backcall_exp >> *exp_op_value; |
| 310 | |||
| 311 | Assignable = AssignableChain | Space >> Variable | Space >> SelfName; | ||
| 312 | |||
| 313 | exp_op_value = Space >> (BackcallOperator | BinaryOperator) >> *SpaceBreak >> Value; | ||
| 314 | Exp = Value >> *exp_op_value; | ||
| 315 | 329 | ||
| 316 | ChainValue = Seperator >> (Chain | Callable) >> -existential_op >> -InvokeArgs; | 330 | ChainValue = Seperator >> (Chain | Callable) >> -existential_op >> -InvokeArgs; |
| 317 | 331 | ||
| @@ -520,16 +534,11 @@ MoonParser::MoonParser() { | |||
| 520 | ); | 534 | ); |
| 521 | 535 | ||
| 522 | const_value = (expr("nil") | expr("true") | expr("false")) >> not_(AlphaNum); | 536 | const_value = (expr("nil") | expr("true") | expr("false")) >> not_(AlphaNum); |
| 523 | minus_exp = expr('-') >> not_(space_one) >> Exp; | ||
| 524 | sharp_exp = expr('#') >> Exp; | ||
| 525 | tilde_exp = expr('~') >> not_(space_one) >> Exp; | ||
| 526 | not_exp = expr("not") >> not_(AlphaNum) >> Exp; | ||
| 527 | unary_exp = minus_exp | sharp_exp | tilde_exp | not_exp; | ||
| 528 | 537 | ||
| 529 | SimpleValue = | 538 | SimpleValue = |
| 530 | (Space >> const_value) | | 539 | (Space >> const_value) | |
| 531 | If | Unless | Switch | With | ClassDecl | ForEach | For | While | Do | | 540 | If | Unless | Switch | With | ClassDecl | ForEach | For | While | Do | |
| 532 | (Space >> unary_exp) | | 541 | (Space >> unary_value) | |
| 533 | TblComprehension | TableLit | Comprehension | FunLit | | 542 | TblComprehension | TableLit | Comprehension | FunLit | |
| 534 | (Space >> Num); | 543 | (Space >> Num); |
| 535 | 544 | ||
