From 6d50d5b97d49a74a8faf587ec2bbf234626adf0c Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Tue, 19 Oct 2021 14:16:54 -0700 Subject: Feat(rc): added subshell commands and cd builtin Slowly chipping away at a decent feature list. Subshell commands are executed by @{ ... }. --- sys/cmd/rc/syntax.y | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'sys/cmd/rc/syntax.y') diff --git a/sys/cmd/rc/syntax.y b/sys/cmd/rc/syntax.y index 469260f..6334819 100644 --- a/sys/cmd/rc/syntax.y +++ b/sys/cmd/rc/syntax.y @@ -1,4 +1,4 @@ -%token Tword Twords Tif Telse Tbang +%token Tword Twords Tif Telse Tbang Tsubshell %token Targs Tindex %token Tbasic Tparen Tblock @@ -14,7 +14,7 @@ /* operator precendence: lowest first */ %left Twhile Telse %left '\n' -%left Tbang +%left Tbang Tsubshell %right '$' Tcount Tflat %right Tindex @@ -24,7 +24,7 @@ } %type line cmds cmdsln body paren block ifbody assign; %type cmd basic executable nonkeyword keyword word words wordsnl atom arg args; -%type Tbang; +%type Tbang Tsubshell Tindex; %type Tword Tif Telse; /* grammar */ @@ -71,6 +71,8 @@ cmd: | block | 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); } basic: executable @@ -103,7 +105,7 @@ nonkeyword: //| '`' block { $$ = maketree1('`', $2); } keyword: - Tif|Telse + Tif|Telse|Tbang|Tsubshell words: /* empty */ { $$ = nil; } -- cgit v1.2.1