From 4ecc1678bcd814d05a572b3d7e46cccad4dc3870 Mon Sep 17 00:00:00 2001 From: Jan Max Meyer Date: Tue, 5 Dec 2023 20:47:33 +0100 Subject: [PATCH] Still unclear on sequence/list severity on inline syntax --- src/compiler/parser.rs | 368 +++++++++++++++++++---------------------- src/compiler/tokay.tok | 24 +-- 2 files changed, 186 insertions(+), 206 deletions(-) diff --git a/src/compiler/parser.rs b/src/compiler/parser.rs index f12e12bd..15feea8c 100644 --- a/src/compiler/parser.rs +++ b/src/compiler/parser.rs @@ -3016,6 +3016,174 @@ impl Parser { ])) ])) ])), + (value!([ + "emit" => "constant", + "children" => + (value!([ + (value!([ + "emit" => "identifier", + "value" => "InlineExpressionList" + ])), + (value!([ + "emit" => "value_parselet", + "children" => + (value!([ + "emit" => "body", + "children" => + (value!([ + (value!([ + "emit" => "sequence", + "children" => + (value!([ + (value!([ + "emit" => "identifier", + "value" => "Expression" + ])), + (value!([ + "emit" => "identifier", + "value" => "___" + ])), + (value!([ + "emit" => "op_mod_pos", + "children" => + (value!([ + "emit" => "sequence", + "children" => + (value!([ + (value!([ + "emit" => "value_token_touch", + "value" => "," + ])), + (value!([ + "emit" => "identifier", + "value" => "_" + ])), + (value!([ + "emit" => "identifier", + "value" => "Expression" + ])), + (value!([ + "emit" => "identifier", + "value" => "___" + ])) + ])) + ])) + ])), + (value!([ + "emit" => "op_mod_opt", + "children" => + (value!([ + "emit" => "sequence", + "children" => + (value!([ + (value!([ + "emit" => "value_token_touch", + "value" => "," + ])), + (value!([ + "emit" => "identifier", + "value" => "_" + ])) + ])) + ])) + ])), + (value!([ + "emit" => "identifier", + "value" => "___" + ])), + (value!([ + "emit" => "call", + "children" => + (value!([ + (value!([ + "emit" => "identifier", + "value" => "ast" + ])), + (value!([ + "emit" => "callarg", + "children" => + (value!([ + "emit" => "value_string", + "value" => "list" + ])) + ])) + ])) + ])) + ])) + ])), + (value!([ + "emit" => "sequence", + "children" => + (value!([ + (value!([ + "emit" => "op_mod_opt", + "children" => + (value!([ + "emit" => "identifier", + "value" => "Expression" + ])) + ])), + (value!([ + "emit" => "identifier", + "value" => "___" + ])), + (value!([ + "emit" => "sequence", + "children" => + (value!([ + (value!([ + "emit" => "value_token_touch", + "value" => "," + ])), + (value!([ + "emit" => "identifier", + "value" => "_" + ])) + ])) + ])), + (value!([ + "emit" => "identifier", + "value" => "___" + ])), + (value!([ + "emit" => "call", + "children" => + (value!([ + (value!([ + "emit" => "identifier", + "value" => "ast" + ])), + (value!([ + "emit" => "callarg", + "children" => + (value!([ + "emit" => "value_string", + "value" => "list" + ])) + ])) + ])) + ])) + ])) + ])), + (value!([ + "emit" => "sequence", + "children" => + (value!([ + (value!([ + "emit" => "identifier", + "value" => "Expression" + ])), + (value!([ + "emit" => "identifier", + "value" => "___" + ])) + ])) + ])) + ])) + ])) + ])) + ])) + ])), (value!([ "emit" => "constant", "children" => @@ -3471,7 +3639,7 @@ impl Parser { ])), (value!([ "emit" => "identifier", - "value" => "Expression" + "value" => "InlineExpressionList" ])) ])) ])) @@ -3933,7 +4101,7 @@ impl Parser { ])), (value!([ "emit" => "identifier", - "value" => "Expression" + "value" => "InlineExpressionList" ])) ])) ])) @@ -4358,174 +4526,6 @@ impl Parser { ])) ])) ])), - (value!([ - "emit" => "constant", - "children" => - (value!([ - (value!([ - "emit" => "identifier", - "value" => "InlineExpressionList" - ])), - (value!([ - "emit" => "value_parselet", - "children" => - (value!([ - "emit" => "body", - "children" => - (value!([ - (value!([ - "emit" => "sequence", - "children" => - (value!([ - (value!([ - "emit" => "identifier", - "value" => "InlineSequences" - ])), - (value!([ - "emit" => "identifier", - "value" => "___" - ])), - (value!([ - "emit" => "op_mod_pos", - "children" => - (value!([ - "emit" => "sequence", - "children" => - (value!([ - (value!([ - "emit" => "value_token_touch", - "value" => "," - ])), - (value!([ - "emit" => "identifier", - "value" => "_" - ])), - (value!([ - "emit" => "identifier", - "value" => "InlineSequences" - ])), - (value!([ - "emit" => "identifier", - "value" => "___" - ])) - ])) - ])) - ])), - (value!([ - "emit" => "op_mod_opt", - "children" => - (value!([ - "emit" => "sequence", - "children" => - (value!([ - (value!([ - "emit" => "value_token_touch", - "value" => "," - ])), - (value!([ - "emit" => "identifier", - "value" => "_" - ])) - ])) - ])) - ])), - (value!([ - "emit" => "identifier", - "value" => "___" - ])), - (value!([ - "emit" => "call", - "children" => - (value!([ - (value!([ - "emit" => "identifier", - "value" => "ast" - ])), - (value!([ - "emit" => "callarg", - "children" => - (value!([ - "emit" => "value_string", - "value" => "list" - ])) - ])) - ])) - ])) - ])) - ])), - (value!([ - "emit" => "sequence", - "children" => - (value!([ - (value!([ - "emit" => "op_mod_opt", - "children" => - (value!([ - "emit" => "identifier", - "value" => "InlineSequences" - ])) - ])), - (value!([ - "emit" => "identifier", - "value" => "___" - ])), - (value!([ - "emit" => "sequence", - "children" => - (value!([ - (value!([ - "emit" => "value_token_touch", - "value" => "," - ])), - (value!([ - "emit" => "identifier", - "value" => "_" - ])) - ])) - ])), - (value!([ - "emit" => "identifier", - "value" => "___" - ])), - (value!([ - "emit" => "call", - "children" => - (value!([ - (value!([ - "emit" => "identifier", - "value" => "ast" - ])), - (value!([ - "emit" => "callarg", - "children" => - (value!([ - "emit" => "value_string", - "value" => "list" - ])) - ])) - ])) - ])) - ])) - ])), - (value!([ - "emit" => "sequence", - "children" => - (value!([ - (value!([ - "emit" => "identifier", - "value" => "InlineSequences" - ])), - (value!([ - "emit" => "identifier", - "value" => "___" - ])) - ])) - ])) - ])) - ])) - ])) - ])) - ])), (value!([ "emit" => "constant", "children" => @@ -5147,18 +5147,8 @@ impl Parser { "value" => "___" ])), (value!([ - "emit" => "block", - "children" => - (value!([ - (value!([ - "emit" => "identifier", - "value" => "InlineExpressionList" - ])), - (value!([ - "emit" => "identifier", - "value" => "InlineSequences" - ])) - ])) + "emit" => "identifier", + "value" => "InlineSequences" ])), (value!([ "emit" => "identifier", @@ -5209,18 +5199,8 @@ impl Parser { "value" => "___" ])), (value!([ - "emit" => "block", - "children" => - (value!([ - (value!([ - "emit" => "identifier", - "value" => "InlineExpressionList" - ])), - (value!([ - "emit" => "identifier", - "value" => "InlineSequences" - ])) - ])) + "emit" => "identifier", + "value" => "InlineSequences" ])), (value!([ "emit" => "identifier", diff --git a/src/compiler/tokay.tok b/src/compiler/tokay.tok index 6ee490e4..727535e4 100644 --- a/src/compiler/tokay.tok +++ b/src/compiler/tokay.tok @@ -200,6 +200,12 @@ ParseletInstance : @{ # Inlined stuff - here comes everything which happens in brackets (...) +InlineExpressionList : @{ + Expression ___ (',' _ Expression ___)+ (',' _)? ___ ast("list") + Expression? ___ (',' _) ___ ast("list") + Expression ___ +} + InlineHoldAssignment : @{ Lvalue _ '+=' _ Expect ast("assign_add_hold") Lvalue _ '-=' _ Expect ast("assign_sub_hold") @@ -208,7 +214,7 @@ InlineHoldAssignment : @{ Lvalue _ '//=' _ Expect ast("assign_divi_hold") Lvalue _ '%=' _ Expect ast("assign_mod_hold") Lvalue _ '=' Not=>> _ Expect ast("assign_hold") - Expression + InlineExpressionList } InlineAssignment : @{ @@ -219,7 +225,7 @@ InlineAssignment : @{ Lvalue _ '//=' _ Expect ast("assign_divi_copy") Lvalue _ '%=' _ Expect ast("assign_mod_copy") Lvalue _ '=' Not=>> _ Expect ast("assign_copy") - Expression + InlineExpressionList } InlineSequenceItem : @{ @@ -237,12 +243,6 @@ InlineSequences : @{ InlineSequence } -InlineExpressionList : @{ - InlineSequences ___ (',' _ InlineSequences ___)+ (',' _)? ___ ast("list") - InlineSequences? ___ (',' _) ___ ast("list") - InlineSequences ___ -} - # Call parameters (used by calls and rvalues) CallArgument : @{ @@ -269,8 +269,8 @@ TokenLiteral : @{ Token : @{ '(' _ ___ ')' ast("dict") # defines an empty dict - '(' _ ___ (InlineExpressionList | InlineSequences) ___ Expect<')'> - '@' _ '(' _ ___ (InlineExpressionList | InlineSequences) ___ Expect<')'> ast("area") + '(' _ ___ InlineSequences ___ Expect<')'> + '@' _ '(' _ ___ InlineSequences ___ Expect<')'> ast("area") Block TokenLiteral ParseletInstance '(' _ ___ CallArguments? ___ Expect<')'> ast("call") @@ -448,6 +448,6 @@ Tokay : @{ Sequences T_EOL? } -_ Tokay* Expect ast("main") +#_ Tokay* Expect ast("main") #_ Tokay* Expect ast2rust(ast("main")) -#_ Tokay* Expect ast_print(ast("main")) +_ Tokay* Expect ast_print(ast("main"))