From 410a6b99d9c7c8155f89cf1cc64fb0335f756105 Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Sun, 16 Jul 2023 15:32:59 +0200 Subject: [PATCH] Berry update grammar (#19129) --- lib/libesp32/berry/tools/grammar/berry.ebnf | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/libesp32/berry/tools/grammar/berry.ebnf b/lib/libesp32/berry/tools/grammar/berry.ebnf index 1b387ae0d..86eef9b58 100644 --- a/lib/libesp32/berry/tools/grammar/berry.ebnf +++ b/lib/libesp32/berry/tools/grammar/berry.ebnf @@ -5,9 +5,10 @@ block = {statement}; (* statement define *) statement = class_stmt | func_stmt | var_stmt | if_stmt | while_stmt | for_stmt | break_stmt | return_stmt | expr_stmt | import_stmt | - try_stmt | throw_stmt | ';'; + try_stmt | throw_stmt | do_stmt | ';'; if_stmt = 'if' expr block {'elif' expr block} ['else' block] 'end'; while_stmt = 'while' expr block 'end'; +do_stmt = 'do' block 'end'; for_stmt = 'for' ID ':' expr block 'end'; break_stmt = 'break' | 'continue'; return_stmt = 'return' [expr]; @@ -28,7 +29,7 @@ throw_stmt = 'raise' expr [',' expr]; var_stmt = 'var' ID ['=' expr] {',' ID ['=' expr]}; (* expression define *) expr_stmt = expr [assign_op expr]; -expr = suffix_expr | unop expr | expr binop expr | range_expr | cond_expr; +expr = suffix_expr | unop expr | expr binop expr | range_expr | cond_expr | walrus_expr; cond_expr = expr '?' expr ':' expr; (* conditional expression *) assign_op = '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>='; @@ -36,9 +37,11 @@ binop = '<' | '<=' | '==' | '!=' | '>' | '>=' | '||' | '&&' | '<<' | '>>' | '&' | '|' | '^' | '+' | '-' | '*' | '/' | '%'; range_expr = expr '..' [expr] unop = '-' | '!' | '~'; +walrus_expr = expr ':=' expr suffix_expr = primary_expr {call_expr | ('.' ID) | '[' expr ']'}; primary_expr = '(' expr ')' | simple_expr | list_expr | map_expr | anon_func | lambda_expr; -simple_expr = INTEGER | REAL | STRING | ID | 'true' | 'false' | 'nil'; +simple_expr = INTEGER | REAL | STRING | ID | 'true' | 'false' | 'nil' | f_string; +f_string = 'f' STRING call_expr = '(' [expr {',' expr}] ')'; list_expr = '[' {expr ','} [expr] ']'; map_expr = '{' {expr ':' expr ','} [expr ':' expr] '}';