aboutsummaryrefslogtreecommitdiff
path: root/src/yuescript/yue_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/yuescript/yue_parser.cpp')
-rw-r--r--src/yuescript/yue_parser.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/yuescript/yue_parser.cpp b/src/yuescript/yue_parser.cpp
index 0d9a183..758865e 100644
--- a/src/yuescript/yue_parser.cpp
+++ b/src/yuescript/yue_parser.cpp
@@ -406,10 +406,10 @@ YueParser::YueParser() {
406 simple_table = Seperator >> KeyValue >> *(sym(',') >> KeyValue); 406 simple_table = Seperator >> KeyValue >> *(sym(',') >> KeyValue);
407 Value = SimpleValue | simple_table | ChainValue | Space >> String; 407 Value = SimpleValue | simple_table | ChainValue | Space >> String;
408 408
409 single_string_inner = expr("\\'") | "\\\\" | not_(expr('\'')) >> Any; 409 single_string_inner = expr('\\') >> set("'\\") | not_(expr('\'')) >> Any;
410 SingleString = symx('\'') >> *single_string_inner >> symx('\''); 410 SingleString = symx('\'') >> *single_string_inner >> symx('\'');
411 interp = symx("#{") >> Exp >> sym('}'); 411 interp = symx("#{") >> Exp >> sym('}');
412 double_string_plain = expr("\\\"") | "\\\\" | not_(expr('"')) >> Any; 412 double_string_plain = expr('\\') >> set("\"\\") | not_(expr('"')) >> Any;
413 double_string_inner = +(not_(interp) >> double_string_plain); 413 double_string_inner = +(not_(interp) >> double_string_plain);
414 double_string_content = double_string_inner | interp; 414 double_string_content = double_string_inner | interp;
415 DoubleString = symx('"') >> Seperator >> *double_string_content >> symx('"'); 415 DoubleString = symx('"') >> Seperator >> *double_string_content >> symx('"');
@@ -484,7 +484,13 @@ YueParser::YueParser() {
484 484
485 SpreadExp = sym("...") >> Exp; 485 SpreadExp = sym("...") >> Exp;
486 486
487 TableValue = ((KeyValue | SpreadExp | Exp) >> not_(sym('='))) | meta_default_pair | default_pair; 487 TableValue =
488 variable_pair_def |
489 normal_pair_def |
490 meta_variable_pair_def |
491 meta_normal_pair_def |
492 SpreadExp |
493 normal_def;
488 494
489 table_lit_lines = SpaceBreak >> TableLitLine >> *(-sym(',') >> SpaceBreak >> TableLitLine) >> -sym(','); 495 table_lit_lines = SpaceBreak >> TableLitLine >> *(-sym(',') >> SpaceBreak >> TableLitLine) >> -sym(',');
490 496
@@ -564,21 +570,16 @@ YueParser::YueParser() {
564 symx(':') >> not_(':') >> 570 symx(':') >> not_(':') >>
565 (Exp | TableBlock | +SpaceBreak >> Exp); 571 (Exp | TableBlock | +SpaceBreak >> Exp);
566 572
567 default_pair = (
568 sym(':') >> Variable >> Seperator |
569 KeyName >> symx(':') >> not_(':') >> Seperator >> exp_not_tab |
570 Space >> String >> symx(':') >> not_(':') >> Seperator >> exp_not_tab |
571 exp_not_tab >> Seperator) >> sym('=') >> Exp;
572
573 meta_variable_pair = sym(":<") >> Space >> Variable >> sym('>'); 573 meta_variable_pair = sym(":<") >> Space >> Variable >> sym('>');
574 574
575 meta_normal_pair = sym('<') >> Space >> -meta_index >> sym(">:") >> 575 meta_normal_pair = sym('<') >> Space >> -meta_index >> sym(">:") >>
576 (Exp | TableBlock | +(SpaceBreak) >> Exp); 576 (Exp | TableBlock | +(SpaceBreak) >> Exp);
577 577
578 meta_default_pair = ( 578 variable_pair_def = variable_pair >> -(sym('=') >> Exp);
579 sym(":<") >> Space >> Variable >> sym('>') >> Seperator | 579 normal_pair_def = normal_pair >> -(sym('=') >> Exp);
580 sym('<') >> Space >> -meta_index >> sym(">:") >> Seperator >> exp_not_tab 580 meta_variable_pair_def = meta_variable_pair >> -(sym('=') >> Exp);
581 ) >> sym('=') >> Exp; 581 meta_normal_pair_def = meta_normal_pair >> -(sym('=') >> Exp);
582 normal_def = Exp >> Seperator >> -(sym('=') >> Exp);
582 583
583 KeyValue = variable_pair | normal_pair | meta_variable_pair | meta_normal_pair; 584 KeyValue = variable_pair | normal_pair | meta_variable_pair | meta_normal_pair;
584 KeyValueList = KeyValue >> *(sym(',') >> KeyValue); 585 KeyValueList = KeyValue >> *(sym(',') >> KeyValue);