aboutsummaryrefslogtreecommitdiff
path: root/src/yuescript/yue_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/yuescript/yue_parser.cpp')
-rwxr-xr-xsrc/yuescript/yue_parser.cpp23
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