diff options
Diffstat (limited to '')
| -rwxr-xr-x | src/yuescript/yue_parser.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/yuescript/yue_parser.cpp b/src/yuescript/yue_parser.cpp index 54dd174..5c42963 100755 --- a/src/yuescript/yue_parser.cpp +++ b/src/yuescript/yue_parser.cpp | |||
| @@ -216,6 +216,8 @@ YueParser::YueParser() { | |||
| 216 | 216 | ||
| 217 | Goto = key("goto") >> Space >> LabelName; | 217 | Goto = key("goto") >> Space >> LabelName; |
| 218 | 218 | ||
| 219 | ShortTabAppending = expr("[]") >> Assign; | ||
| 220 | |||
| 219 | BreakLoop = (expr("break") | expr("continue")) >> not_(AlphaNum); | 221 | BreakLoop = (expr("break") | expr("continue")) >> not_(AlphaNum); |
| 220 | 222 | ||
| 221 | Return = key("return") >> -(TableBlock | ExpListLow); | 223 | Return = key("return") >> -(TableBlock | ExpListLow); |
| @@ -335,7 +337,7 @@ YueParser::YueParser() { | |||
| 335 | 337 | ||
| 336 | Update = Space >> update_op >> expr("=") >> Exp; | 338 | Update = Space >> update_op >> expr("=") >> Exp; |
| 337 | 339 | ||
| 338 | Assignable = AssignableChain | Space >> Variable | Space >> SelfName; | 340 | Assignable = Space >> (AssignableChain | Variable | SelfName); |
| 339 | 341 | ||
| 340 | unary_value = unary_operator >> *(Space >> unary_operator) >> Value; | 342 | unary_value = unary_operator >> *(Space >> unary_operator) >> Value; |
| 341 | 343 | ||
| @@ -382,16 +384,16 @@ YueParser::YueParser() { | |||
| 382 | return true; | 384 | return true; |
| 383 | }); | 385 | }); |
| 384 | 386 | ||
| 385 | chain_line = CheckIndent >> (chain_item | Space >> (chain_dot_chain | ColonChain)) >> -InvokeArgs; | 387 | chain_line = CheckIndent >> Space >> (chain_dot_chain | ColonChain) >> -InvokeArgs; |
| 386 | chain_block = pl::user(true_(), [](const item_t& item) { | 388 | chain_block = pl::user(true_(), [](const item_t& item) { |
| 387 | State* st = reinterpret_cast<State*>(item.user_data); | 389 | State* st = reinterpret_cast<State*>(item.user_data); |
| 388 | return st->noChainBlockStack.empty() || !st->noChainBlockStack.top(); | 390 | return st->noChainBlockStack.empty() || !st->noChainBlockStack.top(); |
| 389 | }) >> +SpaceBreak >> Advance >> ensure( | 391 | }) >> +SpaceBreak >> Advance >> ensure( |
| 390 | chain_line >> *(+SpaceBreak >> chain_line), PopIndent); | 392 | chain_line >> *(+SpaceBreak >> chain_line), PopIndent); |
| 391 | ChainValue = Seperator >> (Chain | Callable) >> -existential_op >> -(InvokeArgs | chain_block) >> -table_appending_op; | 393 | ChainValue = Space >> Seperator >> (Chain | Callable) >> -existential_op >> -(InvokeArgs | chain_block) >> -table_appending_op; |
| 392 | 394 | ||
| 393 | simple_table = Seperator >> KeyValue >> *(sym(',') >> KeyValue); | 395 | simple_table = Seperator >> KeyValue >> *(sym(',') >> KeyValue); |
| 394 | Value = SimpleValue | simple_table | ChainValue | String; | 396 | Value = SimpleValue | simple_table | ChainValue | Space >> String; |
| 395 | 397 | ||
| 396 | single_string_inner = expr("\\'") | "\\\\" | not_(expr('\'')) >> Any; | 398 | single_string_inner = expr("\\'") | "\\\\" | not_(expr('\'')) >> Any; |
| 397 | SingleString = symx('\'') >> *single_string_inner >> symx('\''); | 399 | SingleString = symx('\'') >> *single_string_inner >> symx('\''); |
| @@ -400,7 +402,7 @@ YueParser::YueParser() { | |||
| 400 | double_string_inner = +(not_(interp) >> double_string_plain); | 402 | double_string_inner = +(not_(interp) >> double_string_plain); |
| 401 | double_string_content = double_string_inner | interp; | 403 | double_string_content = double_string_inner | interp; |
| 402 | DoubleString = symx('"') >> Seperator >> *double_string_content >> symx('"'); | 404 | DoubleString = symx('"') >> Seperator >> *double_string_content >> symx('"'); |
| 403 | String = Space >> (DoubleString | SingleString | LuaString); | 405 | String = DoubleString | SingleString | LuaString; |
| 404 | 406 | ||
| 405 | lua_string_open = '[' >> *expr('=') >> '['; | 407 | lua_string_open = '[' >> *expr('=') >> '['; |
| 406 | lua_string_close = ']' >> *expr('=') >> ']'; | 408 | lua_string_close = ']' >> *expr('=') >> ']'; |
| @@ -423,7 +425,7 @@ YueParser::YueParser() { | |||
| 423 | LuaString = LuaStringOpen >> -Break >> LuaStringContent >> LuaStringClose; | 425 | LuaString = LuaStringOpen >> -Break >> LuaStringContent >> LuaStringClose; |
| 424 | 426 | ||
| 425 | Parens = symx('(') >> *SpaceBreak >> Exp >> *SpaceBreak >> sym(')'); | 427 | Parens = symx('(') >> *SpaceBreak >> Exp >> *SpaceBreak >> sym(')'); |
| 426 | Callable = Space >> (Variable | SelfName | MacroName | VarArg | Parens); | 428 | Callable = Variable | SelfName | MacroName | VarArg | Parens; |
| 427 | FnArgsExpList = Exp >> *((Break | sym(',')) >> White >> Exp); | 429 | FnArgsExpList = Exp >> *((Break | sym(',')) >> White >> Exp); |
| 428 | 430 | ||
| 429 | FnArgs = (symx('(') >> *SpaceBreak >> -FnArgsExpList >> *SpaceBreak >> sym(')')) | | 431 | FnArgs = (symx('(') >> *SpaceBreak >> -FnArgsExpList >> *SpaceBreak >> sym(')')) | |
| @@ -435,11 +437,10 @@ YueParser::YueParser() { | |||
| 435 | existential_op = expr('?') >> not_(expr('?')); | 437 | existential_op = expr('?') >> not_(expr('?')); |
| 436 | table_appending_op = expr("[]"); | 438 | table_appending_op = expr("[]"); |
| 437 | chain_call = (Callable | String) >> -existential_op >> ChainItems; | 439 | chain_call = (Callable | String) >> -existential_op >> ChainItems; |
| 438 | chain_item = and_(set(".\\")) >> ChainItems; | 440 | chain_index_chain = Index >> -existential_op >> -ChainItems; |
| 439 | chain_dot_chain = DotChainItem >> -existential_op >> -ChainItems; | 441 | chain_dot_chain = DotChainItem >> -existential_op >> -ChainItems; |
| 440 | 442 | ||
| 441 | Chain = chain_call | chain_item | | 443 | Chain = chain_call | chain_dot_chain | ColonChain | chain_index_chain; |
| 442 | Space >> (chain_dot_chain | ColonChain); | ||
| 443 | 444 | ||
| 444 | AssignableChain = Seperator >> Chain; | 445 | AssignableChain = Seperator >> Chain; |
| 445 | 446 | ||
| @@ -631,8 +632,8 @@ YueParser::YueParser() { | |||
| 631 | Statement = Space >> ( | 632 | Statement = Space >> ( |
| 632 | Import | While | Repeat | For | ForEach | | 633 | Import | While | Repeat | For | ForEach | |
| 633 | Return | Local | Global | Export | Macro | | 634 | Return | Local | Global | Export | Macro | |
| 634 | MacroInPlace | BreakLoop | Label | Goto | LocalAttrib | | 635 | MacroInPlace | BreakLoop | Label | Goto | ShortTabAppending | |
| 635 | Backcall | PipeBody | ExpListAssign | 636 | LocalAttrib | Backcall | PipeBody | ExpListAssign |
| 636 | ) >> Space >> | 637 | ) >> Space >> |
| 637 | -statement_appendix >> -statement_sep; | 638 | -statement_appendix >> -statement_sep; |
| 638 | 639 | ||
