diff options
Diffstat (limited to 'src/yuescript/yue_parser.cpp')
-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 | ||