From da77d3be2eb0785bc0c0b60c686e163d6243c744 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 21 Oct 2021 13:28:25 -0700 Subject: feat(rc): added andand and oror operators --- sys/cmd/rc/syntax.y | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'sys/cmd/rc/syntax.y') diff --git a/sys/cmd/rc/syntax.y b/sys/cmd/rc/syntax.y index b486484..2e7e1da 100644 --- a/sys/cmd/rc/syntax.y +++ b/sys/cmd/rc/syntax.y @@ -1,6 +1,6 @@ -%token Tword Twords Tif Telse Tbang Tsubshell -%token Toror Tandand There Tredir Tpipe Tdup -%token Tbasic Tparen Tblock Targs Tindex +%token Tfor Tin Twhile Tif Telse Tswitch Ttwiddle Tbang Tsubshell Tfunc +%token Tredir Tdup Tpipe Tindex +%token Tbasic Targs Tword Twords Tparen Tblock %define parse.error verbose @@ -12,8 +12,8 @@ %} /* operator precendence: lowest first */ -%left Twhile Telse -%left '\n' +%left Tif Tfor Tswitch ')' Twhile Telse +%left Tandand Toror '\n' %left Tbang Tsubshell %left Tpipe; %left '^'; @@ -26,7 +26,7 @@ } %type line cmds cmdsln body paren block ifbody assign epilog redir; %type cmd basic executable nonkeyword keyword word words wordsnl atom; -%type Tbang Tsubshell Tif Telse; +%type Tfor Tin Twhile Tif Telse Tswitch Ttwiddle Tbang Tsubshell Tfunc; %type Tword Tredir Tpipe; /* grammar */ @@ -80,11 +80,13 @@ cmd: | basic { $$ = maketree1(Tbasic, $1); } | block epilog { $$ = hangepilog($1, $2); } | cmd Tpipe nl cmd { $$ = hangchild2($2, $1, 0, $4, 1); } +| cmd Tandand nl cmd { $$ = maketree2(Tandand, $1, $4); } +| cmd Toror nl cmd { $$ = maketree2(Toror, $1, $4); } | redir cmd %prec Tbang { $$ = hangchild1($1, $2, 1); } | assign cmd %prec Tbang { $$ = hangchild1($1, $2, 2); } -| Tif paren nl ifbody { $$ = hangchild1($2, $1, 0); } | Tbang cmd { $$ = maketree1(Tbang, $2); } | Tsubshell cmd { $$ = maketree1(Tsubshell, $2); } +| Tif paren nl ifbody { $$ = hangchild1($2, $1, 0); } basic: executable @@ -112,7 +114,7 @@ nonkeyword: //| '`' block { $$ = maketree1('`', $2); } keyword: - Tif|Telse|Tbang|Tsubshell + Tin|Tfor|Twhile|Tif|Telse|Tswitch|Tbang|Tsubshell|Tfunc words: /* empty */ { $$ = nil; } -- cgit v1.2.1