From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Sb6p3-0001JH-K1 for garchives@archives.gentoo.org; Sun, 03 Jun 2012 09:10:06 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9375CE07D2; Sun, 3 Jun 2012 09:08:41 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 313A8E07D2 for ; Sun, 3 Jun 2012 09:08:41 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 68A711B4019 for ; Sun, 3 Jun 2012 09:08:40 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 54818E5436 for ; Sun, 3 Jun 2012 09:08:38 +0000 (UTC) From: "Petteri Räty" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Petteri Räty" Message-ID: <1330413775.565c53e2416f102a845e78b96360f6e39f5d1637.betelgeuse@gentoo> Subject: [gentoo-commits] proj/libbash:master commit in: scripts/, bashast/, bashast/gunit/, bashast/features_script/ X-VCS-Repository: proj/libbash X-VCS-Files: bashast/bashast.g bashast/features_script/features.sh.ast bashast/features_script/features.sh.walker.tokens bashast/gunit/arith_main.gunit bashast/gunit/array.gunit bashast/gunit/assoc_array.gunit bashast/gunit/compound.gunit bashast/gunit/expansions.gunit bashast/gunit/param_main.gunit bashast/libbashWalker.g scripts/arithmetic_assignment.bash scripts/command_execution.bash scripts/compound_command.bash scripts/var_def.bash scripts/var_expansion.bash X-VCS-Directories: scripts/ bashast/ bashast/gunit/ bashast/features_script/ X-VCS-Committer: betelgeuse X-VCS-Committer-Name: Petteri Räty X-VCS-Revision: 565c53e2416f102a845e78b96360f6e39f5d1637 X-VCS-Branch: master Date: Sun, 3 Jun 2012 09:08:38 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: 886665f8-9ea7-467c-b480-8371e6c4c3c8 X-Archives-Hash: df29c47761f865a4c011625e58e4bf94 commit: 565c53e2416f102a845e78b96360f6e39f5d1637 Author: Mu Qiao gentoo org> AuthorDate: Tue Feb 28 07:22:55 2012 +0000 Commit: Petteri R=C3=A4ty gentoo org> CommitDate: Tue Feb 28 07:22:55 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/libbash.git;a= =3Dcommit;h=3D565c53e2 Parser&Walker: allow multiple arithmetic expressions --- bashast/bashast.g | 18 ++- bashast/features_script/features.sh.ast | 2 +- bashast/features_script/features.sh.walker.tokens | 2 +- bashast/gunit/arith_main.gunit | 157 +++++++++++----= ------ bashast/gunit/array.gunit | 20 ++-- bashast/gunit/assoc_array.gunit | 12 +- bashast/gunit/compound.gunit | 18 ++-- bashast/gunit/expansions.gunit | 6 +- bashast/gunit/param_main.gunit | 13 +- bashast/libbashWalker.g | 22 +++- scripts/arithmetic_assignment.bash | 5 +- scripts/command_execution.bash | 1 + scripts/compound_command.bash | 5 + scripts/var_def.bash | 4 + scripts/var_expansion.bash | 2 + 15 files changed, 161 insertions(+), 126 deletions(-) diff --git a/bashast/bashast.g b/bashast/bashast.g index 8286a00..ded2fab 100644 --- a/bashast/bashast.g +++ b/bashast/bashast.g @@ -68,6 +68,7 @@ tokens{ REDIR; ARITHMETIC_CONDITION; ARITHMETIC_EXPRESSION; + ARITHMETIC; KEYWORD_TEST; BUILTIN_TEST; MATCH_ANY_EXCEPT; @@ -525,11 +526,11 @@ for_expr ) DO wspace command_list semiel DONE -> ^(FOR name for_each_value* co= mmand_list) | LLPAREN EOL? // initilization - (BLANK? init=3Darithmetic BLANK?|BLANK)? + (BLANK? init=3Darithmetics BLANK?|BLANK)? // condition - (SEMIC (BLANK? fcond=3Darithmetic BLANK?|BLANK)? SEMIC|DOUBLE_SEMIC) + (SEMIC (BLANK? fcond=3Darithmetics BLANK?|BLANK)? SEMIC|DOUBLE_SEMIC= ) // modification - (BLANK? mod=3Darithmetic)? wspace? RPAREN RPAREN semiel DO wspace co= mmand_list semiel DONE + (BLANK? mod=3Darithmetics)? wspace? RPAREN RPAREN semiel DO wspace c= ommand_list semiel DONE -> ^(CFOR ^(FOR_INIT $init)? ^(FOR_COND $fcond)? command_list ^(FOR= _MOD $mod)?) ); for_each_value @@ -585,7 +586,7 @@ current_shell : LBRACE wspace command_list semiel RBRACE -> ^(CURRENT_SHELL command_l= ist); =20 arithmetic_expression - : LLPAREN wspace? arithmetic wspace? RPAREN RPAREN -> ^(ARITHMETIC_EXPR= ESSION arithmetic); + : LLPAREN wspace? arithmetics wspace? RPAREN RPAREN -> ^(ARITHMETIC_EXP= RESSION arithmetics); condition_comparison : condition_expr -> ^(COMPOUND_COND condition_expr); =20 @@ -841,9 +842,12 @@ parameter_expansion | COLON BLANK? ( os=3Dexplicit_arithmetic (COLON BLANK? len=3Dexplicit_arithmetic)? - -> ^(OFFSET variable_name $os ^($len)?) + // It will make the tree parser's work easier if OFFSET is used as = the root of arithmetic. + // Otherwise, the tree parser can see several arithmetic expression= s but can not tell + // which one is for offset and which one is for length. + -> ^(OFFSET variable_name ^(OFFSET $os) ^(OFFSET ^($len))?) | COLON BLANK? len=3Dexplicit_arithmetic - -> ^(OFFSET variable_name NUMBER["0"] ^($len)?) + -> ^(OFFSET variable_name ^(OFFSET NUMBER["0"]) ^(OFFSET ^($len))?= ) ) | parameter_delete_operator parameter_delete_pattern -> ^(parameter_delete_operator variable_name parameter_delete_patter= n) @@ -962,7 +966,7 @@ arithmetic_part | DOLLAR LSQUARE BLANK? arithmetics BLANK? RSQUARE -> arithmetics; =20 arithmetics - : arithmetic (COMMA! BLANK!? arithmetic)*; + : arithmetic (COMMA BLANK? arithmetic)* -> ^(ARITHMETIC arithmetic)+; =20 arithmetics_test : arithmetics EOF!; diff --git a/bashast/features_script/features.sh.ast b/bashast/features_s= cript/features.sh.ast index fc0eb4c..60d71b3 100644 --- a/bashast/features_script/features.sh.ast +++ b/bashast/features_script/features.sh.ast @@ -1 +1 @@ -(LIST (COMMAND (FUNCTION (STRING lots_o_echo) (CURRENT_SHELL (LIST (COMM= AND (STRING echo) (STRING (DOUBLE_QUOTED_STRING The number of tests= that have failed : (VAR_REF failedtests)))) (COMMAND (STRING ech= o) (STRING (SINGLE_QUOTED_STRING '$failedtests'))) (COMMAND (STRING echo)= (STRING (VAR_REF failedtests))))))) (COMMAND (FUNCTION (STRING do_some_a= rith) (CURRENT_SHELL (LIST (COMMAND (ARITHMETIC_EXPRESSION (* 5 4))) (COM= MAND (ARITHMETIC_EXPRESSION (** 5 4))) (COMMAND (ARITHMETIC_EXPRESSION (+= (VAR_REF failedtests) (/ 5 4)))) (COMMAND (ARITHMETIC_EXPRESSION (+ (VAR= _REF z) (MINUS_SIGN 3)))))))) (COMMAND (FUNCTION (STRING arrays) (SUBSHEL= L (LIST (COMMAND (VARIABLE_DEFINITIONS (=3D asdf (ARRAY (STRING a) (STRIN= G b) (STRING c) (STRING d))))) (COMMAND (STRING echo) (STRING (VAR_REF (a= sdf 3)))) (COMMAND (VARIABLE_DEFINITIONS (=3D foo (ARRAY (STRING (COMMAND= _SUB `echo 6`)) (STRING b) (STRING c) (STRING d))))) (COMMAND (VARIABLE_D= EFINITIONS (=3D (arr (VAR_REF foo)) (STRING 3)) )) (COMMAND (VARIABLE_DEFINITIONS (=3D bar (ARRAY (STRING a) (STRING b) = (=3D 5 (STRING c)))))))))) (COMMAND (STRING echo) (STRING (BRACE_EXP (STR= ING a) (STRING b)))) (COMMAND (STRING echo) (STRING (BRACE_EXP (.. a d)))= ) (COMMAND (STRING echo) (STRING (BRACE_EXP (STRING (BRACE_EXP (STRING a)= (STRING b))) (STRING c) (STRING d)))) (COMMAND (STRING echo) (STRING a (= BRACE_EXP (STRING b) (STRING c)))) (COMMAND (STRING (COMMAND_SUB $(echo f= oobar)))) (| (COMMAND (STRING ls)) (COMMAND (STRING grep) (STRING gunit) = (REDIR >> (STRING filelist)))) (COMMAND (case (STRING (COMMAND_SUB `echo = asdf`)) (CASE_PATTERN (BRANCH gz) CASE_COMMAND (LIST (COMMAND (STRING ech= o) (STRING yay)))) (CASE_PATTERN (BRANCH bzip) CASE_COMMAND (LIST (COMMAN= D (STRING echo) (STRING three)))) (CASE_PATTERN (BRANCH MATCH_ALL) CASE_C= OMMAND (LIST (COMMAND (STRING echo) (STRING woo)))))) (COMMAND (for each = (STRING (COMMAND_SUB `ls |grep log`)) (LIST (COMMAND (STRING echo) (STRIN= G (VAR_REF each))) (COMMAND (STRING cat) (STR ING each))))) (COMMAND (CFOR (FOR_INIT (+ 5 3)) (FOR_COND (+ 6 2)) (LIST= (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (+ 3 1)))) (COMMAND (sele= ct each (STRING (COMMAND_SUB `ls |grep output`)) (LIST (COMMAND (STRING e= cho) (STRING asdf) (REDIR 2 > (STRING / dev / null)))))) (COMMAND (IF_STA= TEMENT (if (LIST (COMMAND (STRING echo) (STRING yay2))) (LIST (COMMAND (S= TRING echo) (STRING yay)))))) (COMMAND (until (LIST (COMMAND (COMPOUND_CO= ND (KEYWORD_TEST (a (STRING this / is . afile)))))) (LIST (COMMAND (STRIN= G touch) (STRING this / is . afile))))) (COMMAND (while (LIST (COMMAND (C= OMPOUND_COND (BUILTIN_TEST (n (STRING foobar)))))) (LIST (COMMAND (STRING= echo) (STRING (DOUBLE_QUOTED_STRING file found)))))) (COMMAND (IF_STAT= EMENT (if (LIST (COMMAND (COMPOUND_COND (BUILTIN_TEST (eq (STRING 5) (STR= ING 6)))))) (LIST (COMMAND (STRING echo) (STRING (DOUBLE_QUOTED_STRING so= mething ' s wrong))))))) (COMMAND (STRING echo) (STRING this) (STRING c= ommand) (STRING has) (STRING multiple) (S TRING arguments)) (COMMAND (STRING wc) (PROCESS_SUBSTITUTION < (LIST (CO= MMAND (STRING cat) (STRING / usr / share / dict / linux . words))))) (|| = (&& (&& (&& (COMMAND (STRING cd) (STRING build)) (COMMAND (STRING . / con= figure))) (COMMAND (STRING make))) (COMMAND (STRING make_install))) (COMM= AND (STRING echo) (STRING fail))) (COMMAND (STRING cd) (STRING / usr / bi= n)) (| (COMMAND (STRING ls) (STRING - al)) (COMMAND (STRING grep) (STRING= more))) (COMMAND (VARIABLE_DEFINITIONS (=3D asdf (STRING parameters)))) = (COMMAND (STRING (VAR_REF (USE_DEFAULT_WHEN_UNSET_OR_NULL asdf (STRING fo= o))))) (COMMAND (STRING (VAR_REF (OFFSET asdf 8)))) (COMMAND (STRING (VAR= _REF (! asdf *)))) (COMMAND (STRING (VAR_REF (! asdf @)))) (COMMAND (STRI= NG (VAR_REF (# foo)))) (COMMAND (STRING (VAR_REF (REPLACE_FIRST replaice = (STRING with) (STRING pattern))))) (COMMAND (STRING (VAR_REF (LAZY_REMOVE= _AT_START asdf (STRING bar))))) (COMMAND (STRING (VAR_REF (REPLACE_AT_STA= RT asdf (STRING bar))))) (COMMAND (STRING ( VAR_REF (LAZY_REMOVE_AT_END asdf (STRING bar))))) (COMMAND (STRING (VAR_= REF (LAZY_REMOVE_AT_END asdf (STRING bar))))) (COMMAND (STRING (VAR_REF 1= )) (STRING (VAR_REF @)) (STRING (VAR_REF *))) (COMMAND (STRING (VAR_REF ?= ))) (COMMAND (STRING (VAR_REF (REPLACE_ALL PV (STRING .) (STRING _))))) (= COMMAND (STRING (VAR_REF (REPLACE_AT_START PV (STRING foo) (STRING bar)))= )) (COMMAND (STRING (VAR_REF (REPLACE_AT_END PV (STRING foo) (STRING bar)= )))) (COMMAND (VARIABLE_DEFINITIONS (=3D MY_PN (STRING (VAR_REF (REPLACE_= FIRST PN (STRING asterisk -))))))) (| (COMMAND (STRING cat) (STRING asdf)= ) (COMMAND (STRING grep) (STRING three) (REDIR 2 >& (FILE_DESCRIPTOR 1)) = (REDIR > (STRING / dev / null)))) (COMMAND (STRING echo) (STRING asdf) (R= EDIR >> (STRING APPEND))) (COMMAND (STRING echo) (STRING cat) (<<< (STR= ING word)))) +(LIST (COMMAND (FUNCTION (STRING lots_o_echo) (CURRENT_SHELL (LIST (COMM= AND (STRING echo) (STRING (DOUBLE_QUOTED_STRING The number of tests= that have failed : (VAR_REF failedtests)))) (COMMAND (STRING ech= o) (STRING (SINGLE_QUOTED_STRING '$failedtests'))) (COMMAND (STRING echo)= (STRING (VAR_REF failedtests))))))) (COMMAND (FUNCTION (STRING do_some_a= rith) (CURRENT_SHELL (LIST (COMMAND (ARITHMETIC_EXPRESSION (ARITHMETIC (*= 5 4)))) (COMMAND (ARITHMETIC_EXPRESSION (ARITHMETIC (** 5 4)))) (COMMAND= (ARITHMETIC_EXPRESSION (ARITHMETIC (+ (VAR_REF failedtests) (/ 5 4))))) = (COMMAND (ARITHMETIC_EXPRESSION (ARITHMETIC (+ (VAR_REF z) (MINUS_SIGN 3)= )))))))) (COMMAND (FUNCTION (STRING arrays) (SUBSHELL (LIST (COMMAND (VAR= IABLE_DEFINITIONS (=3D asdf (ARRAY (STRING a) (STRING b) (STRING c) (STRI= NG d))))) (COMMAND (STRING echo) (STRING (VAR_REF (asdf (ARITHMETIC 3))))= ) (COMMAND (VARIABLE_DEFINITIONS (=3D foo (ARRAY (STRING (COMMAND_SUB `ec= ho 6`)) (STRING b) (STRING c) (STRING d)))))=20 (COMMAND (VARIABLE_DEFINITIONS (=3D (arr (ARITHMETIC (VAR_REF foo))) (ST= RING 3)))) (COMMAND (VARIABLE_DEFINITIONS (=3D bar (ARRAY (STRING a) (STR= ING b) (=3D (ARITHMETIC 5) (STRING c)))))))))) (COMMAND (STRING echo) (ST= RING (BRACE_EXP (STRING a) (STRING b)))) (COMMAND (STRING echo) (STRING (= BRACE_EXP (.. a d)))) (COMMAND (STRING echo) (STRING (BRACE_EXP (STRING (= BRACE_EXP (STRING a) (STRING b))) (STRING c) (STRING d)))) (COMMAND (STRI= NG echo) (STRING a (BRACE_EXP (STRING b) (STRING c)))) (COMMAND (STRING (= COMMAND_SUB $(echo foobar)))) (| (COMMAND (STRING ls)) (COMMAND (STRING g= rep) (STRING gunit) (REDIR >> (STRING filelist)))) (COMMAND (case (STRING= (COMMAND_SUB `echo asdf`)) (CASE_PATTERN (BRANCH gz) CASE_COMMAND (LIST = (COMMAND (STRING echo) (STRING yay)))) (CASE_PATTERN (BRANCH bzip) CASE_C= OMMAND (LIST (COMMAND (STRING echo) (STRING three)))) (CASE_PATTERN (BRAN= CH MATCH_ALL) CASE_COMMAND (LIST (COMMAND (STRING echo) (STRING woo))))))= (COMMAND (for each (STRING (COMMAND_SUB `ls |g rep log`)) (LIST (COMMAND (STRING echo) (STRING (VAR_REF each))) (COMMAN= D (STRING cat) (STRING each))))) (COMMAND (CFOR (FOR_INIT (ARITHMETIC (+ = 5 3))) (FOR_COND (ARITHMETIC (+ 6 2))) (LIST (COMMAND (STRING echo) (STRI= NG yay))) (FOR_MOD (ARITHMETIC (+ 3 1))))) (COMMAND (select each (STRING = (COMMAND_SUB `ls |grep output`)) (LIST (COMMAND (STRING echo) (STRING asd= f) (REDIR 2 > (STRING / dev / null)))))) (COMMAND (IF_STATEMENT (if (LIST= (COMMAND (STRING echo) (STRING yay2))) (LIST (COMMAND (STRING echo) (STR= ING yay)))))) (COMMAND (until (LIST (COMMAND (COMPOUND_COND (KEYWORD_TEST= (a (STRING this / is . afile)))))) (LIST (COMMAND (STRING touch) (STRING= this / is . afile))))) (COMMAND (while (LIST (COMMAND (COMPOUND_COND (BU= ILTIN_TEST (n (STRING foobar)))))) (LIST (COMMAND (STRING echo) (STRING (= DOUBLE_QUOTED_STRING file found)))))) (COMMAND (IF_STATEMENT (if (LIST = (COMMAND (COMPOUND_COND (BUILTIN_TEST (eq (STRING 5) (STRING 6)))))) (LIS= T (COMMAND (STRING echo) (STRING (DOUBLE_ QUOTED_STRING something ' s wrong))))))) (COMMAND (STRING echo) (STRIN= G this) (STRING command) (STRING has) (STRING multiple) (STRING arguments= )) (COMMAND (STRING wc) (PROCESS_SUBSTITUTION < (LIST (COMMAND (STRING ca= t) (STRING / usr / share / dict / linux . words))))) (|| (&& (&& (&& (COM= MAND (STRING cd) (STRING build)) (COMMAND (STRING . / configure))) (COMMA= ND (STRING make))) (COMMAND (STRING make_install))) (COMMAND (STRING echo= ) (STRING fail))) (COMMAND (STRING cd) (STRING / usr / bin)) (| (COMMAND = (STRING ls) (STRING - al)) (COMMAND (STRING grep) (STRING more))) (COMMAN= D (VARIABLE_DEFINITIONS (=3D asdf (STRING parameters)))) (COMMAND (STRING= (VAR_REF (USE_DEFAULT_WHEN_UNSET_OR_NULL asdf (STRING foo))))) (COMMAND = (STRING (VAR_REF (OFFSET asdf (OFFSET (ARITHMETIC 8)))))) (COMMAND (STRIN= G (VAR_REF (! asdf *)))) (COMMAND (STRING (VAR_REF (! asdf @)))) (COMMAND= (STRING (VAR_REF (# foo)))) (COMMAND (STRING (VAR_REF (REPLACE_FIRST rep= laice (STRING with) (STRING pattern))))) (C OMMAND (STRING (VAR_REF (LAZY_REMOVE_AT_START asdf (STRING bar))))) (COM= MAND (STRING (VAR_REF (REPLACE_AT_START asdf (STRING bar))))) (COMMAND (S= TRING (VAR_REF (LAZY_REMOVE_AT_END asdf (STRING bar))))) (COMMAND (STRING= (VAR_REF (LAZY_REMOVE_AT_END asdf (STRING bar))))) (COMMAND (STRING (VAR= _REF 1)) (STRING (VAR_REF @)) (STRING (VAR_REF *))) (COMMAND (STRING (VAR= _REF ?))) (COMMAND (STRING (VAR_REF (REPLACE_ALL PV (STRING .) (STRING _)= )))) (COMMAND (STRING (VAR_REF (REPLACE_AT_START PV (STRING foo) (STRING = bar))))) (COMMAND (STRING (VAR_REF (REPLACE_AT_END PV (STRING foo) (STRIN= G bar))))) (COMMAND (VARIABLE_DEFINITIONS (=3D MY_PN (STRING (VAR_REF (RE= PLACE_FIRST PN (STRING asterisk -))))))) (| (COMMAND (STRING cat) (STRING= asdf)) (COMMAND (STRING grep) (STRING three) (REDIR 2 >& (FILE_DESCRIPTO= R 1)) (REDIR > (STRING / dev / null)))) (COMMAND (STRING echo) (STRING as= df) (REDIR >> (STRING APPEND))) (COMMAND (STRING echo) (STRING cat) (<<< = (STRING word)))) diff --git a/bashast/features_script/features.sh.walker.tokens b/bashast/= features_script/features.sh.walker.tokens index 7082afd..8b92d49 100644 --- a/bashast/features_script/features.sh.walker.tokens +++ b/bashast/features_script/features.sh.walker.tokens @@ -1,2 +1,2 @@ -LIST DOWN COMMAND DOWN FUNCTION DOWN STRING DOWN NAME UP CURRENT_SHELL D= OWN LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN DOUBLE_QUOTED_= STRING DOWN NAME BLANK NAME BLANK NAME BLANK NAME BLANK NAME BLANK NAME B= LANK NAME COLON BLANK VAR_REF DOWN NAME UP UP UP UP COMMAND DOWN STRING D= OWN NAME UP STRING DOWN SINGLE_QUOTED_STRING DOWN SINGLE_QUOTED_STRING_TO= KEN UP UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN VAR_REF DOWN NA= ME UP UP UP UP UP UP UP COMMAND DOWN FUNCTION DOWN STRING DOWN NAME UP CU= RRENT_SHELL DOWN LIST DOWN COMMAND DOWN ARITHMETIC_EXPRESSION DOWN TIMES = DOWN DIGIT DIGIT UP UP UP COMMAND DOWN ARITHMETIC_EXPRESSION DOWN EXP DOW= N DIGIT DIGIT UP UP UP COMMAND DOWN ARITHMETIC_EXPRESSION DOWN PLUS DOWN = VAR_REF DOWN NAME UP SLASH DOWN DIGIT DIGIT UP UP UP UP COMMAND DOWN ARIT= HMETIC_EXPRESSION DOWN PLUS DOWN VAR_REF DOWN LETTER UP MINUS_SIGN DOWN D= IGIT UP UP UP UP UP UP UP UP COMMAND DOWN FUNCTION DOWN STRING DOWN NAME = UP SUBSHELL DOWN LIST DOWN COMMAND DOWN V ARIABLE_DEFINITIONS DOWN EQUALS DOWN NAME ARRAY DOWN STRING DOWN LETTER = UP STRING DOWN LETTER UP STRING DOWN LETTER UP STRING DOWN LETTER UP UP U= P UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN VAR_REF DOWN NAME DO= WN DIGIT UP UP UP UP COMMAND DOWN VARIABLE_DEFINITIONS DOWN EQUALS DOWN N= AME ARRAY DOWN STRING DOWN COMMAND_SUB DOWN COMMAND_SUBSTITUTION_TICK UP = UP STRING DOWN LETTER UP STRING DOWN LETTER UP STRING DOWN LETTER UP UP U= P UP UP COMMAND DOWN VARIABLE_DEFINITIONS DOWN EQUALS DOWN NAME DOWN VAR_= REF DOWN NAME UP UP STRING DOWN DIGIT UP UP UP UP COMMAND DOWN VARIABLE_D= EFINITIONS DOWN EQUALS DOWN NAME ARRAY DOWN STRING DOWN LETTER UP STRING = DOWN LETTER UP EQUALS DOWN DIGIT STRING DOWN LETTER UP UP UP UP UP UP UP = UP UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN BRACE_EXP DOWN STRI= NG DOWN LETTER UP STRING DOWN LETTER UP UP UP UP COMMAND DOWN STRING DOWN= NAME UP STRING DOWN BRACE_EXP DOWN DOTDOT DOWN LETTER LETTER UP UP UP UP= COMMAND DOWN STRING DOWN NAME UP STRING=20 DOWN BRACE_EXP DOWN STRING DOWN BRACE_EXP DOWN STRING DOWN LETTER UP STR= ING DOWN LETTER UP UP UP STRING DOWN LETTER UP STRING DOWN LETTER UP UP U= P UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN LETTER BRACE_EXP DOWN S= TRING DOWN LETTER UP STRING DOWN LETTER UP UP UP UP COMMAND DOWN STRING D= OWN COMMAND_SUB DOWN COMMAND_SUBSTITUTION_PAREN UP UP UP PIPE DOWN COMMAN= D DOWN STRING DOWN NAME UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOW= N NAME UP REDIR DOWN OP STRING DOWN NAME UP UP UP UP COMMAND DOWN CASE DO= WN STRING DOWN COMMAND_SUB DOWN COMMAND_SUBSTITUTION_TICK UP UP CASE_PATT= ERN DOWN BRANCH DOWN NAME UP CASE_COMMAND LIST DOWN COMMAND DOWN STRING D= OWN NAME UP STRING DOWN NAME UP UP UP UP CASE_PATTERN DOWN BRANCH DOWN NA= ME UP CASE_COMMAND LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN= NAME UP UP UP UP CASE_PATTERN DOWN BRANCH DOWN MATCH_ALL UP CASE_COMMAND= LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP UP UP UP = UP UP COMMAND DOWN FOR DOWN NAME STRING D OWN COMMAND_SUB DOWN COMMAND_SUBSTITUTION_TICK UP UP LIST DOWN COMMAND D= OWN STRING DOWN NAME UP STRING DOWN VAR_REF DOWN NAME UP UP UP COMMAND DO= WN STRING DOWN NAME UP STRING DOWN NAME UP UP UP UP UP COMMAND DOWN CFOR = DOWN FOR_INIT DOWN PLUS DOWN DIGIT DIGIT UP UP FOR_COND DOWN PLUS DOWN DI= GIT DIGIT UP UP LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN NA= ME UP UP UP FOR_MOD DOWN PLUS DOWN DIGIT DIGIT UP UP UP UP COMMAND DOWN S= ELECT DOWN NAME STRING DOWN COMMAND_SUB DOWN COMMAND_SUBSTITUTION_TICK UP= UP LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP REDIR = DOWN DIGIT GREATER_THAN STRING DOWN SLASH NAME SLASH NAME UP UP UP UP UP = UP COMMAND DOWN IF_STATEMENT DOWN IF DOWN LIST DOWN COMMAND DOWN STRING D= OWN NAME UP STRING DOWN NAME UP UP UP LIST DOWN COMMAND DOWN STRING DOWN = NAME UP STRING DOWN NAME UP UP UP UP UP UP COMMAND DOWN UNTIL DOWN LIST D= OWN COMMAND DOWN COMPOUND_COND DOWN KEYWORD_TEST DOWN LETTER DOWN STRING = DOWN NAME SLASH NAME DOT NAME UP UP UP UP UP UP LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME SLASH= NAME DOT NAME UP UP UP UP UP COMMAND DOWN WHILE DOWN LIST DOWN COMMAND D= OWN COMPOUND_COND DOWN BUILTIN_TEST DOWN LETTER DOWN STRING DOWN NAME UP = UP UP UP UP UP LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN DOU= BLE_QUOTED_STRING DOWN NAME BLANK NAME UP UP UP UP UP UP COMMAND DOWN IF_= STATEMENT DOWN IF DOWN LIST DOWN COMMAND DOWN COMPOUND_COND DOWN BUILTIN_= TEST DOWN NAME DOWN STRING DOWN DIGIT UP STRING DOWN DIGIT UP UP UP UP UP= UP LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN DOUBLE_QUOTED_= STRING DOWN NAME SQUOTE LETTER BLANK NAME UP UP UP UP UP UP UP COMMAND DO= WN STRING DOWN NAME UP STRING DOWN NAME UP STRING DOWN NAME UP STRING DOW= N NAME UP STRING DOWN NAME UP STRING DOWN NAME UP UP COMMAND DOWN STRING = DOWN NAME UP PROCESS_SUBSTITUTION DOWN LESS_THAN LIST DOWN COMMAND DOWN S= TRING DOWN NAME UP STRING DOWN SLASH NAME SLASH NAME SLASH NAME SLASH NAM= E DOT NAME UP UP UP UP UP LOGICOR DOWN LO GICAND DOWN LOGICAND DOWN LOGICAND DOWN COMMAND DOWN STRING DOWN NAME UP= STRING DOWN NAME UP UP COMMAND DOWN STRING DOWN DOT SLASH NAME UP UP UP = COMMAND DOWN STRING DOWN NAME UP UP UP COMMAND DOWN STRING DOWN NAME UP U= P UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP UP UP COMMAND D= OWN STRING DOWN NAME UP STRING DOWN SLASH NAME SLASH NAME UP UP PIPE DOWN= COMMAND DOWN STRING DOWN NAME UP STRING DOWN MINUS NAME UP UP COMMAND DO= WN STRING DOWN NAME UP STRING DOWN NAME UP UP UP COMMAND DOWN VARIABLE_DE= FINITIONS DOWN EQUALS DOWN NAME STRING DOWN NAME UP UP UP UP COMMAND DOWN= STRING DOWN VAR_REF DOWN USE_DEFAULT_WHEN_UNSET_OR_NULL DOWN NAME STRING= DOWN NAME UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN OFFSET DO= WN NAME DIGIT UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN BANG DOWN= NAME TIMES UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN BANG DOWN N= AME AT UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN POUND DOWN NAME = UP UP UP UP COMMAND DOWN STRING DOWN VAR_ REF DOWN REPLACE_FIRST DOWN NAME STRING DOWN NAME UP STRING DOWN NAME UP= UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN LAZY_REMOVE_AT_START D= OWN NAME STRING DOWN NAME UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF= DOWN REPLACE_AT_START DOWN NAME STRING DOWN NAME UP UP UP UP UP COMMAND = DOWN STRING DOWN VAR_REF DOWN LAZY_REMOVE_AT_END DOWN NAME STRING DOWN NA= ME UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN LAZY_REMOVE_AT_EN= D DOWN NAME STRING DOWN NAME UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_= REF DOWN DIGIT UP UP STRING DOWN VAR_REF DOWN AT UP UP STRING DOWN VAR_RE= F DOWN TIMES UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN QMARK UP UP U= P COMMAND DOWN STRING DOWN VAR_REF DOWN REPLACE_ALL DOWN NAME STRING DOWN= DOT UP STRING DOWN UNDERSCORE UP UP UP UP UP COMMAND DOWN STRING DOWN VA= R_REF DOWN REPLACE_AT_START DOWN NAME STRING DOWN NAME UP STRING DOWN NAM= E UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN REPLACE_AT_END DOW= N NAME STRING DOWN NAME UP STRING DOWN NA ME UP UP UP UP UP COMMAND DOWN VARIABLE_DEFINITIONS DOWN EQUALS DOWN NAM= E STRING DOWN VAR_REF DOWN REPLACE_FIRST DOWN NAME STRING DOWN NAME MINUS= UP UP UP UP UP UP UP PIPE DOWN COMMAND DOWN STRING DOWN NAME UP STRING D= OWN NAME UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP REDIR= DOWN DIGIT OP FILE_DESCRIPTOR DOWN DIGIT UP UP REDIR DOWN GREATER_THAN S= TRING DOWN SLASH NAME SLASH NAME UP UP UP UP COMMAND DOWN STRING DOWN NAM= E UP STRING DOWN NAME UP REDIR DOWN OP STRING DOWN NAME UP UP UP COMMAND = DOWN STRING DOWN NAME UP STRING DOWN NAME UP HERE_STRING_OP DOWN BLANK ST= RING DOWN NAME UP UP UP UP=20 +LIST DOWN COMMAND DOWN FUNCTION DOWN STRING DOWN NAME UP CURRENT_SHELL D= OWN LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN DOUBLE_QUOTED_= STRING DOWN NAME BLANK NAME BLANK NAME BLANK NAME BLANK NAME BLANK NAME B= LANK NAME COLON BLANK VAR_REF DOWN NAME UP UP UP UP COMMAND DOWN STRING D= OWN NAME UP STRING DOWN SINGLE_QUOTED_STRING DOWN SINGLE_QUOTED_STRING_TO= KEN UP UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN VAR_REF DOWN NA= ME UP UP UP UP UP UP UP COMMAND DOWN FUNCTION DOWN STRING DOWN NAME UP CU= RRENT_SHELL DOWN LIST DOWN COMMAND DOWN ARITHMETIC_EXPRESSION DOWN ARITHM= ETIC DOWN TIMES DOWN DIGIT DIGIT UP UP UP UP COMMAND DOWN ARITHMETIC_EXPR= ESSION DOWN ARITHMETIC DOWN EXP DOWN DIGIT DIGIT UP UP UP UP COMMAND DOWN= ARITHMETIC_EXPRESSION DOWN ARITHMETIC DOWN PLUS DOWN VAR_REF DOWN NAME U= P SLASH DOWN DIGIT DIGIT UP UP UP UP UP COMMAND DOWN ARITHMETIC_EXPRESSIO= N DOWN ARITHMETIC DOWN PLUS DOWN VAR_REF DOWN LETTER UP MINUS_SIGN DOWN D= IGIT UP UP UP UP UP UP UP UP UP COMMAND D OWN FUNCTION DOWN STRING DOWN NAME UP SUBSHELL DOWN LIST DOWN COMMAND DO= WN VARIABLE_DEFINITIONS DOWN EQUALS DOWN NAME ARRAY DOWN STRING DOWN LETT= ER UP STRING DOWN LETTER UP STRING DOWN LETTER UP STRING DOWN LETTER UP U= P UP UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN VAR_REF DOWN NAME= DOWN ARITHMETIC DOWN DIGIT UP UP UP UP UP COMMAND DOWN VARIABLE_DEFINITI= ONS DOWN EQUALS DOWN NAME ARRAY DOWN STRING DOWN COMMAND_SUB DOWN COMMAND= _SUBSTITUTION_TICK UP UP STRING DOWN LETTER UP STRING DOWN LETTER UP STRI= NG DOWN LETTER UP UP UP UP UP COMMAND DOWN VARIABLE_DEFINITIONS DOWN EQUA= LS DOWN NAME DOWN ARITHMETIC DOWN VAR_REF DOWN NAME UP UP UP STRING DOWN = DIGIT UP UP UP UP COMMAND DOWN VARIABLE_DEFINITIONS DOWN EQUALS DOWN NAME= ARRAY DOWN STRING DOWN LETTER UP STRING DOWN LETTER UP EQUALS DOWN ARITH= METIC DOWN DIGIT UP STRING DOWN LETTER UP UP UP UP UP UP UP UP UP UP COMM= AND DOWN STRING DOWN NAME UP STRING DOWN BRACE_EXP DOWN STRING DOWN LETTE= R UP STRING DOWN LETTER UP UP UP UP COMMA ND DOWN STRING DOWN NAME UP STRING DOWN BRACE_EXP DOWN DOTDOT DOWN LETTE= R LETTER UP UP UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN BRACE_E= XP DOWN STRING DOWN BRACE_EXP DOWN STRING DOWN LETTER UP STRING DOWN LETT= ER UP UP UP STRING DOWN LETTER UP STRING DOWN LETTER UP UP UP UP COMMAND = DOWN STRING DOWN NAME UP STRING DOWN LETTER BRACE_EXP DOWN STRING DOWN LE= TTER UP STRING DOWN LETTER UP UP UP UP COMMAND DOWN STRING DOWN COMMAND_S= UB DOWN COMMAND_SUBSTITUTION_PAREN UP UP UP PIPE DOWN COMMAND DOWN STRING= DOWN NAME UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP RED= IR DOWN OP STRING DOWN NAME UP UP UP UP COMMAND DOWN CASE DOWN STRING DOW= N COMMAND_SUB DOWN COMMAND_SUBSTITUTION_TICK UP UP CASE_PATTERN DOWN BRAN= CH DOWN NAME UP CASE_COMMAND LIST DOWN COMMAND DOWN STRING DOWN NAME UP S= TRING DOWN NAME UP UP UP UP CASE_PATTERN DOWN BRANCH DOWN NAME UP CASE_CO= MMAND LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP UP U= P UP CASE_PATTERN DOWN BRANCH DOWN MATCH_ ALL UP CASE_COMMAND LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DO= WN NAME UP UP UP UP UP UP COMMAND DOWN FOR DOWN NAME STRING DOWN COMMAND_= SUB DOWN COMMAND_SUBSTITUTION_TICK UP UP LIST DOWN COMMAND DOWN STRING DO= WN NAME UP STRING DOWN VAR_REF DOWN NAME UP UP UP COMMAND DOWN STRING DOW= N NAME UP STRING DOWN NAME UP UP UP UP UP COMMAND DOWN CFOR DOWN FOR_INIT= DOWN ARITHMETIC DOWN PLUS DOWN DIGIT DIGIT UP UP UP FOR_COND DOWN ARITHM= ETIC DOWN PLUS DOWN DIGIT DIGIT UP UP UP LIST DOWN COMMAND DOWN STRING DO= WN NAME UP STRING DOWN NAME UP UP UP FOR_MOD DOWN ARITHMETIC DOWN PLUS DO= WN DIGIT DIGIT UP UP UP UP UP COMMAND DOWN SELECT DOWN NAME STRING DOWN C= OMMAND_SUB DOWN COMMAND_SUBSTITUTION_TICK UP UP LIST DOWN COMMAND DOWN ST= RING DOWN NAME UP STRING DOWN NAME UP REDIR DOWN DIGIT GREATER_THAN STRIN= G DOWN SLASH NAME SLASH NAME UP UP UP UP UP UP COMMAND DOWN IF_STATEMENT = DOWN IF DOWN LIST DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME = UP UP UP LIST DOWN COMMAND DOWN STRING DO WN NAME UP STRING DOWN NAME UP UP UP UP UP UP COMMAND DOWN UNTIL DOWN LI= ST DOWN COMMAND DOWN COMPOUND_COND DOWN KEYWORD_TEST DOWN LETTER DOWN STR= ING DOWN NAME SLASH NAME DOT NAME UP UP UP UP UP UP LIST DOWN COMMAND DOW= N STRING DOWN NAME UP STRING DOWN NAME SLASH NAME DOT NAME UP UP UP UP UP= COMMAND DOWN WHILE DOWN LIST DOWN COMMAND DOWN COMPOUND_COND DOWN BUILTI= N_TEST DOWN LETTER DOWN STRING DOWN NAME UP UP UP UP UP UP LIST DOWN COMM= AND DOWN STRING DOWN NAME UP STRING DOWN DOUBLE_QUOTED_STRING DOWN NAME B= LANK NAME UP UP UP UP UP UP COMMAND DOWN IF_STATEMENT DOWN IF DOWN LIST D= OWN COMMAND DOWN COMPOUND_COND DOWN BUILTIN_TEST DOWN NAME DOWN STRING DO= WN DIGIT UP STRING DOWN DIGIT UP UP UP UP UP UP LIST DOWN COMMAND DOWN ST= RING DOWN NAME UP STRING DOWN DOUBLE_QUOTED_STRING DOWN NAME SQUOTE LETTE= R BLANK NAME UP UP UP UP UP UP UP COMMAND DOWN STRING DOWN NAME UP STRING= DOWN NAME UP STRING DOWN NAME UP STRING DOWN NAME UP STRING DOWN NAME UP= STRING DOWN NAME UP UP COMMAND DOWN STRI NG DOWN NAME UP PROCESS_SUBSTITUTION DOWN LESS_THAN LIST DOWN COMMAND DO= WN STRING DOWN NAME UP STRING DOWN SLASH NAME SLASH NAME SLASH NAME SLASH= NAME DOT NAME UP UP UP UP UP LOGICOR DOWN LOGICAND DOWN LOGICAND DOWN LO= GICAND DOWN COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP UP COMMA= ND DOWN STRING DOWN DOT SLASH NAME UP UP UP COMMAND DOWN STRING DOWN NAME= UP UP UP COMMAND DOWN STRING DOWN NAME UP UP UP COMMAND DOWN STRING DOWN= NAME UP STRING DOWN NAME UP UP UP COMMAND DOWN STRING DOWN NAME UP STRIN= G DOWN SLASH NAME SLASH NAME UP UP PIPE DOWN COMMAND DOWN STRING DOWN NAM= E UP STRING DOWN MINUS NAME UP UP COMMAND DOWN STRING DOWN NAME UP STRING= DOWN NAME UP UP UP COMMAND DOWN VARIABLE_DEFINITIONS DOWN EQUALS DOWN NA= ME STRING DOWN NAME UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN USE= _DEFAULT_WHEN_UNSET_OR_NULL DOWN NAME STRING DOWN NAME UP UP UP UP UP COM= MAND DOWN STRING DOWN VAR_REF DOWN OFFSET DOWN NAME OFFSET DOWN ARITHMETI= C DOWN DIGIT UP UP UP UP UP UP COMMAND DO WN STRING DOWN VAR_REF DOWN BANG DOWN NAME TIMES UP UP UP UP COMMAND DOW= N STRING DOWN VAR_REF DOWN BANG DOWN NAME AT UP UP UP UP COMMAND DOWN STR= ING DOWN VAR_REF DOWN POUND DOWN NAME UP UP UP UP COMMAND DOWN STRING DOW= N VAR_REF DOWN REPLACE_FIRST DOWN NAME STRING DOWN NAME UP STRING DOWN NA= ME UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN LAZY_REMOVE_AT_ST= ART DOWN NAME STRING DOWN NAME UP UP UP UP UP COMMAND DOWN STRING DOWN VA= R_REF DOWN REPLACE_AT_START DOWN NAME STRING DOWN NAME UP UP UP UP UP COM= MAND DOWN STRING DOWN VAR_REF DOWN LAZY_REMOVE_AT_END DOWN NAME STRING DO= WN NAME UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN LAZY_REMOVE_= AT_END DOWN NAME STRING DOWN NAME UP UP UP UP UP COMMAND DOWN STRING DOWN= VAR_REF DOWN DIGIT UP UP STRING DOWN VAR_REF DOWN AT UP UP STRING DOWN V= AR_REF DOWN TIMES UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN QMARK UP= UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN REPLACE_ALL DOWN NAME STRING= DOWN DOT UP STRING DOWN UNDERSCORE UP UP UP UP UP COMMAND DOWN STRING DOWN VAR_REF DOWN REPLACE_AT_START DOWN NA= ME STRING DOWN NAME UP STRING DOWN NAME UP UP UP UP UP COMMAND DOWN STRIN= G DOWN VAR_REF DOWN REPLACE_AT_END DOWN NAME STRING DOWN NAME UP STRING D= OWN NAME UP UP UP UP UP COMMAND DOWN VARIABLE_DEFINITIONS DOWN EQUALS DOW= N NAME STRING DOWN VAR_REF DOWN REPLACE_FIRST DOWN NAME STRING DOWN NAME = MINUS UP UP UP UP UP UP UP PIPE DOWN COMMAND DOWN STRING DOWN NAME UP STR= ING DOWN NAME UP UP COMMAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP = REDIR DOWN DIGIT OP FILE_DESCRIPTOR DOWN DIGIT UP UP REDIR DOWN GREATER_T= HAN STRING DOWN SLASH NAME SLASH NAME UP UP UP UP COMMAND DOWN STRING DOW= N NAME UP STRING DOWN NAME UP REDIR DOWN OP STRING DOWN NAME UP UP UP COM= MAND DOWN STRING DOWN NAME UP STRING DOWN NAME UP HERE_STRING_OP DOWN BLA= NK STRING DOWN NAME UP UP UP UP=20 =20 diff --git a/bashast/gunit/arith_main.gunit b/bashast/gunit/arith_main.gu= nit index 7e04dc3..5e33c87 100644 --- a/bashast/gunit/arith_main.gunit +++ b/bashast/gunit/arith_main.gunit @@ -23,117 +23,118 @@ gunit java_libbash; =20 arithmetics_test: //primary: -"3" -> "3" -"foo" -> (VAR_REF foo) -"foo[1]" -> (VAR_REF (foo 1)) +"3" -> (ARITHMETIC 3) +"foo" -> (ARITHMETIC (VAR_REF foo)) +"foo[1]" -> (ARITHMETIC (VAR_REF (foo (ARITHMETIC 1)))) =20 //unary: -"3" -> "3" -"b--" -> (POST_DECR (VAR_REF b)) -"i++" -> (POST_INCR (VAR_REF i)) +"3" -> (ARITHMETIC 3) +"b--" -> (ARITHMETIC (POST_DECR (VAR_REF b))) +"i++" -> (ARITHMETIC (POST_INCR (VAR_REF i))) =20 //pre_inc_dec: -"++i" -> (PRE_INCR (VAR_REF i)) -"--b" -> (PRE_DECR (VAR_REF b)) +"++i" -> (ARITHMETIC (PRE_INCR (VAR_REF i))) +"--b" -> (ARITHMETIC (PRE_DECR (VAR_REF b))) =20 //unary: -"6" -> "6" -"+9" -> (PLUS_SIGN 9) -"-15" -> (MINUS_SIGN 15) -"++ z" -> (PRE_INCR (VAR_REF z)) -"f--" -> (POST_DECR (VAR_REF f)) -"~8" -> (~ 8) -"!8" -> (! 8) -"!!8" -> (! (! 8)) -"--8" -> (PRE_DECR 8) +"6" -> (ARITHMETIC 6) +"+9" -> (ARITHMETIC (PLUS_SIGN 9)) +"-15" -> (ARITHMETIC (MINUS_SIGN 15)) +"++ z" -> (ARITHMETIC (PRE_INCR (VAR_REF z))) +"f--" -> (ARITHMETIC (POST_DECR (VAR_REF f))) +"~8" -> (ARITHMETIC (~ 8)) +"!8" -> (ARITHMETIC (! 8)) +"!!8" -> (ARITHMETIC (! (! 8))) +"--8" -> (ARITHMETIC (PRE_DECR 8)) =20 //exponential: -"8" -> "8" -"6**2" -> (** 6 2) -"-5**+4" -> (** (MINUS_SIGN 5) (PLUS_SIGN 4)) +"8" -> (ARITHMETIC 8) +"6**2" -> (ARITHMETIC (** 6 2)) +"-5**+4" -> (ARITHMETIC (** (MINUS_SIGN 5) (PLUS_SIGN 4))) =20 //times_division_modulus: -"9" -> "9" -"7 * 9" -> (* 7 9) -"7 / 9" -> (/ 7 9) -"7 % 9" -> (% 7 9) -"6*4*3" -> (* (* 6 4) 3) -"6*4/3" -> (/ (* 6 4) 3) -"6%4*3" -> (* (% 6 4) 3) -"7/3**6" -> (/ 7 (** 3 6)) -"7/-3**6" -> (/ 7 (** (MINUS_SIGN 3) 6)) +"9" -> (ARITHMETIC 9) +"7 * 9" -> (ARITHMETIC (* 7 9)) +"7 / 9" -> (ARITHMETIC (/ 7 9)) +"7 % 9" -> (ARITHMETIC (% 7 9)) +"6*4*3" -> (ARITHMETIC (* (* 6 4) 3)) +"6*4/3" -> (ARITHMETIC (/ (* 6 4) 3)) +"6%4*3" -> (ARITHMETIC (* (% 6 4) 3)) +"7/3**6" -> (ARITHMETIC (/ 7 (** 3 6))) +"7/-3**6" -> (ARITHMETIC (/ 7 (** (MINUS_SIGN 3) 6))) =20 //addsub: -"10" -> "10" -"9+27" -> (+ 9 27) -"9-27" -> (- 9 27) -"9-27+8" -> (+ (- 9 27) 8) -"9-35*-2" -> (- 9 (* 35 (MINUS_SIGN 2))) -"9*5+2" -> (+ (* 9 5) 2) +"10" -> (ARITHMETIC 10) +"9+27" -> (ARITHMETIC (+ 9 27)) +"9-27" -> (ARITHMETIC (- 9 27)) +"9-27+8" -> (ARITHMETIC (+ (- 9 27) 8)) +"9-35*-2" -> (ARITHMETIC (- 9 (* 35 (MINUS_SIGN 2)))) +"9*5+2" -> (ARITHMETIC (+ (* 9 5) 2)) =20 //shifts: -"16" -> "16" -"16+2>>3" -> (>> (+ 16 2) 3) -"16+2<<3" -> (<< (+ 16 2) 3) +"16" -> (ARITHMETIC 16) +"16+2>>3" -> (ARITHMETIC (>> (+ 16 2) 3)) +"16+2<<3" -> (ARITHMETIC (<< (+ 16 2) 3)) =20 //compare: -"17" ->"17" -"19<20" -> (< 19 20) -"19!=3D20" -> (NOT_EQUALS 19 20) -"19=3D=3D20" -> (EQUALS_TO 19 20) +"17" ->(ARITHMETIC 17) +"19<20" -> (ARITHMETIC (< 19 20)) +"19!=3D20" -> (ARITHMETIC (NOT_EQUALS 19 20)) +"19=3D=3D20" -> (ARITHMETIC (EQUALS_TO 19 20)) =20 //bitwiseand: -"17" -> "17" -"17 & 15" -> (& 17 15) +"17" -> (ARITHMETIC 17) +"17 & 15" -> (ARITHMETIC (& 17 15)) =20 //bitwisexor: -"17" -> "17" -"17 ^ 15" -> (^ 17 15) +"17" -> (ARITHMETIC 17) +"17 ^ 15" -> (ARITHMETIC (^ 17 15)) =20 //bitwiseor: -"17" -> "17" -"17 | 15" -> (| 17 15) +"17" -> (ARITHMETIC 17) +"17 | 15" -> (ARITHMETIC (| 17 15)) =20 //logicand: -"17" -> "17" -"17 && 15" -> (&& 17 15) +"17" -> (ARITHMETIC 17) +"17 && 15" -> (ARITHMETIC (&& 17 15)) =20 //logicor: -"17" -> "17" -"17 || 15" -> (|| 17 15) +"17" -> (ARITHMETIC 17) +"17 || 15" -> (ARITHMETIC (|| 17 15)) =20 //arithmetic: -"foo=3D5+3" -> (=3D foo (+ 5 3)) -"foo[5]=3D5+3" -> (=3D (foo 5) (+ 5 3)) -"${foo[5]}=3D3" -> (=3D (VAR_REF (VAR_REF (foo 5))) 3) -"${foo[5]}*=3D3" -> (MUL_ASSIGN (VAR_REF (VAR_REF (foo 5))) 3) -"${foo[5]}^=3D3" -> (XOR_ASSIGN (VAR_REF (VAR_REF (foo 5))) 3) -"var *=3D 5" -> (MUL_ASSIGN var 5) -"var /=3D 5" -> (DIVIDE_ASSIGN var 5) -"var %=3D 5" -> (MOD_ASSIGN var 5) -"asdf +=3D 5" -> (PLUS_ASSIGN asdf 5) -"var -=3D 5" -> (MINUS_ASSIGN var 5) -"var <<=3D 5" -> (LSHIFT_ASSIGN var 5) -"var >>=3D 5" -> (RSHIFT_ASSIGN var 5) -"var &=3D 5" -> (AND_ASSIGN var 5) -"var ^=3D 5" -> (XOR_ASSIGN var 5) -"var |=3D 5" -> (OR_ASSIGN var 5) +"foo=3D5+3" -> (ARITHMETIC (=3D foo (+ 5 3))) +"foo[5]=3D5+3" -> (ARITHMETIC (=3D (foo (ARITHMETIC 5)) (+ 5 3))) +"${foo[5]}=3D3" -> (ARITHMETIC (=3D (VAR_REF (VAR_REF (foo (ARITHMETIC 5= )))) 3)) +"${foo[5]}*=3D3" -> (ARITHMETIC (MUL_ASSIGN (VAR_REF (VAR_REF (foo (ARI= THMETIC 5)))) 3)) +"${foo[5]}^=3D3" -> (ARITHMETIC (XOR_ASSIGN (VAR_REF (VAR_REF (foo (ARIT= HMETIC 5)))) 3)) +"var *=3D 5" -> (ARITHMETIC (MUL_ASSIGN var 5)) +"var /=3D 5" -> (ARITHMETIC (DIVIDE_ASSIGN var 5)) +"var %=3D 5" -> (ARITHMETIC (MOD_ASSIGN var 5)) +"asdf +=3D 5" -> (ARITHMETIC (PLUS_ASSIGN asdf 5)) +"var -=3D 5" -> (ARITHMETIC (MINUS_ASSIGN var 5)) +"var <<=3D 5" -> (ARITHMETIC (LSHIFT_ASSIGN var 5)) +"var >>=3D 5" -> (ARITHMETIC (RSHIFT_ASSIGN var 5)) +"var &=3D 5" -> (ARITHMETIC (AND_ASSIGN var 5)) +"var ^=3D 5" -> (ARITHMETIC (XOR_ASSIGN var 5)) +"var |=3D 5" -> (ARITHMETIC (OR_ASSIGN var 5)) "3=3D7" FAIL =20 -"13"->"13" -"5?7:2"->(ARITHMETIC_CONDITION 5 7 2) -"(4-3)?0:1"->(ARITHMETIC_CONDITION (- 4 3) 0 1) +"13"->(ARITHMETIC 13) +"5?7:2"->(ARITHMETIC (ARITHMETIC_CONDITION 5 7 2)) +"(4-3)?0:1"-> (ARITHMETIC (ARITHMETIC_CONDITION (ARITHMETIC (- 4 3)) 0 1= )) +"(4-3)?(0,2):1"-> (ARITHMETIC (ARITHMETIC_CONDITION (ARITHMETIC (- 4 3))= (ARITHMETIC 0) (ARITHMETIC 2) 1)) =20 //arithmetics: -"~ 10" -> (~ 10) +"~ 10" -> (ARITHMETIC (~ 10)) =20 arithmetic_expansion: -"$((5+4, 3+2, a*b))" -> (ARITHMETIC_EXPRESSION (+ 5 4) (+ 3 2) (* (VAR_R= EF a) (VAR_REF b))) -"$[1]" -> (ARITHMETIC_EXPRESSION 1) -"$(($((1))))" -> (ARITHMETIC_EXPRESSION (ARITHMETIC_EXPRESSION 1)) +"$((5+4, 3+2, a*b))" -> (ARITHMETIC_EXPRESSION (ARITHMETIC (+ 5 4)) (ARI= THMETIC (+ 3 2)) (ARITHMETIC (* (VAR_REF a) (VAR_REF b)))) +"$[1]" -> (ARITHMETIC_EXPRESSION (ARITHMETIC 1)) +"$(($((1))))" -> (ARITHMETIC_EXPRESSION (ARITHMETIC (ARITHMETIC_EXPRESSI= ON (ARITHMETIC 1)))) =20 start: -"echo $(( 3 + 2 ))" -> (LIST (COMMAND (STRING echo) (STRING (ARITHMETIC_= EXPRESSION (+ 3 2))))) -"echo $((++i))" -> (LIST (COMMAND (STRING echo) (STRING (ARITHMETIC_EXPR= ESSION (PRE_INCR (VAR_REF i)))))) -"echo $(( ++i ))" -> (LIST (COMMAND (STRING echo) (STRING (ARITHMETIC_EX= PRESSION (PRE_INCR (VAR_REF i)))))) -"echo \"The solution is: $(( 3+2 ))\""-> (LIST (COMMAND (STRING echo) (S= TRING (DOUBLE_QUOTED_STRING The solution is : (ARITHMETIC_EXPRESSIO= N (+ 3 2)))))) +"echo $(( 3 + 2 ))" -> (LIST (COMMAND (STRING echo) (STRING (ARITHMETIC_= EXPRESSION (ARITHMETIC (+ 3 2)))))) +"echo $((++i))" -> (LIST (COMMAND (STRING echo) (STRING (ARITHMETIC_EXPR= ESSION (ARITHMETIC (PRE_INCR (VAR_REF i))))))) +"echo $(( ++i ))" -> (LIST (COMMAND (STRING echo) (STRING (ARITHMETIC_EX= PRESSION (ARITHMETIC (PRE_INCR (VAR_REF i))))))) +"echo \"The solution is: $(( 3+2 ))\""-> (LIST (COMMAND (STRING echo) (S= TRING (DOUBLE_QUOTED_STRING The solution is : (ARITHMETIC_EXPRESSIO= N (ARITHMETIC (+ 3 2))))))) diff --git a/bashast/gunit/array.gunit b/bashast/gunit/array.gunit index 514eb53..ddfdfeb 100644 --- a/bashast/gunit/array.gunit +++ b/bashast/gunit/array.gunit @@ -36,22 +36,22 @@ builtin_variable_definitions: =20 variable_reference: "$asdf" -> (VAR_REF asdf) -"${asdf[0]:-default}" -> (VAR_REF (USE_DEFAULT_WHEN_UNSET_OR_NULL (asdf = 0) (STRING default))) -"${asdf[3]}" -> (VAR_REF (asdf 3)) -"${asdf[4] }" -> (VAR_REF (asdf 4)) -"${asdf[i*2]}" -> (VAR_REF (asdf (* (VAR_REF i) 2))) -"${asdf[1]:2:2}" -> (VAR_REF (OFFSET (asdf 1) 2 2)) -"${asdf[2]##word}" -> (VAR_REF (REPLACE_AT_START (asdf 2) (STRING word))= ) -"${asdf[3]%%word}" -> (VAR_REF (REPLACE_AT_END (asdf 3) (STRING word))) -"${asdf[4]//pattern}" -> (VAR_REF (REPLACE_ALL (asdf 4) (STRING pattern)= )) +"${asdf[0]:-default}" -> (VAR_REF (USE_DEFAULT_WHEN_UNSET_OR_NULL (asdf = (ARITHMETIC 0)) (STRING default))) +"${asdf[3]}" -> (VAR_REF (asdf (ARITHMETIC 3))) +"${asdf[4] }" -> (VAR_REF (asdf (ARITHMETIC 4))) +"${asdf[i*2]}" -> (VAR_REF (asdf (ARITHMETIC (* (VAR_REF i) 2)))) +"${asdf[1]:2:2}" -> (VAR_REF (OFFSET (asdf (ARITHMETIC 1)) (OFFSET (ARIT= HMETIC 2)) (OFFSET (ARITHMETIC 2)))) +"${asdf[2]##word}" -> (VAR_REF (REPLACE_AT_START (asdf (ARITHMETIC 2)) (= STRING word))) +"${asdf[3]%%word}" -> (VAR_REF (REPLACE_AT_END (asdf (ARITHMETIC 3)) (ST= RING word))) +"${asdf[4]//pattern}" -> (VAR_REF (REPLACE_ALL (asdf (ARITHMETIC 4)) (ST= RING pattern))) "${asdf}" -> (VAR_REF asdf) "${#asdf[0]}" -> (VAR_REF (# (asdf 0))) -"${#asdf[ $i ]}" -> (VAR_REF (# (asdf (VAR_REF i)))) +"${#asdf[ $i ]}" -> (VAR_REF (# (asdf (ARITHMETIC (VAR_REF i))))) "${asdf[@]}" -> (VAR_REF (ARRAY asdf @)) "${asdf[*]}" -> (VAR_REF (ARRAY asdf *)) "${#asdf[@]}" -> (VAR_REF (# (asdf ARRAY_SIZE))) "${#asdf[*]}" -> (VAR_REF (# (asdf ARRAY_SIZE))) -"${asdf[@]:0:1}" -> (VAR_REF (OFFSET (ARRAY asdf @) 0 1)) +"${asdf[@]:0:1}" -> (VAR_REF (OFFSET (ARRAY asdf @) (OFFSET (ARITHMETIC = 0)) (OFFSET (ARITHMETIC 1)))) "${asdf[*]#path}" -> (VAR_REF (LAZY_REMOVE_AT_START (ARRAY asdf *) (STRI= NG path))) "${asdf[@]%word}" -> (VAR_REF (LAZY_REMOVE_AT_END (ARRAY asdf @) (STRIN= G word))) "${asdf[*]/pattern/string}" -> (VAR_REF (REPLACE_FIRST (ARRAY asdf *) (S= TRING pattern) (STRING string))) diff --git a/bashast/gunit/assoc_array.gunit b/bashast/gunit/assoc_array.= gunit index ab58374..5af1c11 100644 --- a/bashast/gunit/assoc_array.gunit +++ b/bashast/gunit/assoc_array.gunit @@ -19,10 +19,10 @@ gunit java_libbash; =20 variable_definition_atom: -"arr[foo]=3D\"asdf\"" -> (=3D (arr (VAR_REF foo)) (STRING (DOUBLE_QUOTED= _STRING asdf))) -"arr=3D(a b [4]=3Dc)" -> (=3D arr (ARRAY (STRING a) (STRING b) (=3D 4 (S= TRING c)))) -"asdf[idx]=3D${var}" -> (=3D (asdf (VAR_REF idx)) (STRING (VAR_REF var))= ) -"asdf[++i]=3D${var}" -> (=3D (asdf (PRE_INCR (VAR_REF i))) (STRING (VAR_= REF var))) -"asdf[++i,j]=3D${var}" -> (=3D (asdf (PRE_INCR (VAR_REF i)) (VAR_REF j))= (STRING (VAR_REF var))) -"asdf[$((i))]=3D${var}" -> (=3D (asdf (VAR_REF i)) (STRING (VAR_REF var)= )) +"arr[foo]=3D\"asdf\"" -> (=3D (arr (ARITHMETIC (VAR_REF foo))) (STRING (= DOUBLE_QUOTED_STRING asdf))) +"arr=3D(a b [4]=3Dc)" -> (=3D arr (ARRAY (STRING a) (STRING b) (=3D (ARI= THMETIC 4) (STRING c)))) +"asdf[idx]=3D${var}" -> (=3D (asdf (ARITHMETIC (VAR_REF idx))) (STRING (= VAR_REF var))) +"asdf[++i]=3D${var}" -> (=3D (asdf (ARITHMETIC (PRE_INCR (VAR_REF i)))) = (STRING (VAR_REF var))) +"asdf[++i,j]=3D${var}" -> (=3D (asdf (ARITHMETIC (PRE_INCR (VAR_REF i)))= (ARITHMETIC (VAR_REF j))) (STRING (VAR_REF var))) +"asdf[$((i))]=3D${var}" -> (=3D (asdf (ARITHMETIC (VAR_REF i))) (STRING = (VAR_REF var))) "asdf[1]=3D(a b c)" FAIL diff --git a/bashast/gunit/compound.gunit b/bashast/gunit/compound.gunit index c5d6845..f3ec44f 100644 --- a/bashast/gunit/compound.gunit +++ b/bashast/gunit/compound.gunit @@ -35,8 +35,8 @@ condition_comparison: "[ asdf \> qwert ]" -> (COMPOUND_COND (BUILTIN_TEST (\> (STRING asdf) (S= TRING qwert)))) =20 arithmetic_expression: -"((5+3))" -> (ARITHMETIC_EXPRESSION (+ 5 3)) -"(( 5+3 ))" -> (ARITHMETIC_EXPRESSION (+ 5 3)) +"((5+3))" -> (ARITHMETIC_EXPRESSION (ARITHMETIC (+ 5 3))) +"(( 5+3, 2 ))" -> (ARITHMETIC_EXPRESSION (ARITHMETIC (+ 5 3)) (ARITHMETI= C 2)) =20 current_shell: "{ time cat; }" -> (CURRENT_SHELL (LIST (COMMAND (STRING cat) time))) @@ -97,10 +97,10 @@ done" -> (for each (STRING (COMMAND_SUB `ls |grep log= `)) (LIST (COMMAND (STRING "for i in foo$var bar ; do echo $i; done" -> (for i (STRING foo (VAR_REF= var)) (STRING bar) (LIST (COMMAND (STRING echo) (STRING (VAR_REF i))))) "for each in `ls |grep log`; do echo file done" FAIL =20 -"for ((5+3;5+3;5+3)); do echo yay; done" -> (CFOR (FOR_INIT (+ 5 3)) (FO= R_COND (+ 5 3)) (LIST (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (+ 5= 3))) -"for ((5+3; ;5+3)); do echo yay; done" -> (CFOR (FOR_INIT (+ 5 3)) (LIST= (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (+ 5 3))) -"for ((;5+3 ;5+3)); do echo yay; done" -> (CFOR (FOR_COND (+ 5 3)) (LIST= (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (+ 5 3))) -"for ((5+3;;5+3)); do echo yay; done" -> (CFOR (FOR_INIT (+ 5 3)) (LIST = (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (+ 5 3))) +"for ((5+3,2;5+3;5+3)); do echo yay; done" -> (CFOR (FOR_INIT (ARITHMETI= C (+ 5 3)) (ARITHMETIC 2)) (FOR_COND (ARITHMETIC (+ 5 3))) (LIST (COMMAND= (STRING echo) (STRING yay))) (FOR_MOD (ARITHMETIC (+ 5 3)))) +"for ((5+3; ;5+3)); do echo yay; done" -> (CFOR (FOR_INIT (ARITHMETIC (+= 5 3))) (LIST (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (ARITHMETIC = (+ 5 3)))) +"for ((;5+3 ;5+3)); do echo yay; done" -> (CFOR (FOR_COND (ARITHMETIC (+= 5 3))) (LIST (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (ARITHMETIC = (+ 5 3)))) +"for ((5+3;;5+3)); do echo yay; done" -> (CFOR (FOR_INIT (ARITHMETIC (+ = 5 3))) (LIST (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (ARITHMETIC (= + 5 3)))) =20 select_expr: "select each in `ls |grep log`; do @@ -143,7 +143,7 @@ while_expr: echo \"file found\" done" -> (while (LIST (COMMAND (STRING echo) (STRING true))) (LIST (COMM= AND (STRING echo) (STRING (DOUBLE_QUOTED_STRING file found))))) "while echo true; do echo \"file found\"; done" -> (while (LIST (COMMAND= (STRING echo) (STRING true))) (LIST (COMMAND (STRING echo) (STRING (DOUB= LE_QUOTED_STRING file found))))) -"while(( 1>0 )); do echo ok; done" -> (while (LIST (COMMAND (ARITHMETIC_= EXPRESSION (> 1 0)))) (LIST (COMMAND (STRING echo) (STRING ok)))) +"while(( 1>0 )); do echo ok; done" -> (while (LIST (COMMAND (ARITHMETIC_= EXPRESSION (ARITHMETIC (> 1 0))))) (LIST (COMMAND (STRING echo) (STRING o= k)))) "while echo true`; do echo file done" FAIL "while [[ -n \"$ver_str\" ]] ; do echo true @@ -186,12 +186,12 @@ esac" -> (case (STRING (DOUBLE_QUOTED_STRING (VAR_R= EF 1))) (CASE_PATTERN (BRANCH =20 command: "[[ asdf > qwert ]] > /dev/null" -> (COMMAND (COMPOUND_COND (KEYWORD_TES= T (> (STRING asdf) (STRING qwert)))) (REDIR > (STRING / dev / null))) -"(( 5+3 )) > /dev/null" -> (COMMAND (ARITHMETIC_EXPRESSION (+ 5 3)) (RED= IR > (STRING / dev / null))) +"(( 5+3 )) > /dev/null" -> (COMMAND (ARITHMETIC_EXPRESSION (ARITHMETIC (= + 5 3))) (REDIR > (STRING / dev / null))) "{ time cat; } > /dev/null" -> (COMMAND (CURRENT_SHELL (LIST (COMMAND (S= TRING cat) time))) (REDIR > (STRING / dev / null))) "(time cat) > /dev/null" -> (COMMAND (SUBSHELL (LIST (COMMAND (STRING ca= t) time))) (REDIR > (STRING / dev / null))) "case a in esac >/dev/null" -> (COMMAND (case (STRING a) CASE_PATTERN) (= REDIR > (STRING / dev / null))) "for i in foo$var bar; do echo $i; done >/dev/null" -> (COMMAND (for i (= STRING foo (VAR_REF var)) (STRING bar) (LIST (COMMAND (STRING echo) (STRI= NG (VAR_REF i))))) (REDIR > (STRING / dev / null))) -"for ((5+3;;5+3)); do echo yay; done >/dev/null" -> (COMMAND (CFOR (FOR_= INIT (+ 5 3)) (LIST (COMMAND (STRING echo) (STRING yay))) (FOR_MOD (+ 5 3= ))) (REDIR > (STRING / dev / null))) +"for ((5+3;;5+3)); do echo yay; done >/dev/null" -> (COMMAND (CFOR (FOR_= INIT (ARITHMETIC (+ 5 3))) (LIST (COMMAND (STRING echo) (STRING yay))) (F= OR_MOD (ARITHMETIC (+ 5 3)))) (REDIR > (STRING / dev / null))) "select each in `ls |grep log`; do echo \"file found\"; done >/dev/null"= -> (COMMAND (select each (STRING (COMMAND_SUB `ls |grep log`)) (LIST (CO= MMAND (STRING echo) (STRING (DOUBLE_QUOTED_STRING file found))))) (REDI= R > (STRING / dev / null))) =20 "if echo yay2; diff --git a/bashast/gunit/expansions.gunit b/bashast/gunit/expansions.gu= nit index a1733e8..543012e 100644 --- a/bashast/gunit/expansions.gunit +++ b/bashast/gunit/expansions.gunit @@ -20,8 +20,8 @@ gunit java_libbash; =20 command_list: "echo a{b,c,d}" -> (LIST (COMMAND (STRING echo) (STRING a (BRACE_EXP (ST= RING b) (STRING c) (STRING d))))) -"((5+5))" -> (LIST (COMMAND (ARITHMETIC_EXPRESSION (+ 5 5)))) -"(( 4 + asdf ))" -> (LIST (COMMAND (ARITHMETIC_EXPRESSION (+ 4 (VAR_REF = asdf))))) +"((5+5))" -> (LIST (COMMAND (ARITHMETIC_EXPRESSION (ARITHMETIC (+ 5 5)))= )) +"(( 4 + asdf ))" -> (LIST (COMMAND (ARITHMETIC_EXPRESSION (ARITHMETIC (+= 4 (VAR_REF asdf)))))) "[[ while=3Dwhile ]] && echo true" -> (LIST (&& (COMMAND (COMPOUND_COND = (KEYWORD_TEST (STRING while =3D while)))) (COMMAND (STRING echo) (STRING = true)))) "[[ while =3D while ]] && echo true" -> (LIST (&& (COMMAND (COMPOUND_CON= D (KEYWORD_TEST (=3D (STRING while) (STRING while))))) (COMMAND (STRING e= cho) (STRING true)))) "for each in `ls |grep output`; do @@ -30,4 +30,4 @@ done" -> (LIST (COMMAND (for each (STRING (COMMAND_SUB = `ls |grep output`)) (LIST "wc <(cat /usr/share/dict/linux.words)" -> (LIST (COMMAND (STRING wc) (P= ROCESS_SUBSTITUTION < (LIST (COMMAND (STRING cat) (STRING / usr / share /= dict / linux . words)))))) =20 all_expansions: -"abc $(ab) ${ab} $((ab)) `ab` \"ab\" 'ab'" -> (STRING abc (COMMAND_SUB= $(ab)) (VAR_REF ab) (ARITHMETIC_EXPRESSION (VAR_REF ab)) (COMMAND_= SUB `ab`) (DOUBLE_QUOTED_STRING ab) 'ab') +"abc $(ab) ${ab} $((ab)) `ab` \"ab\" 'ab'" -> (STRING abc (COMMAND_SUB= $(ab)) (VAR_REF ab) (ARITHMETIC_EXPRESSION (ARITHMETIC (VAR_REF ab))= ) (COMMAND_SUB `ab`) (DOUBLE_QUOTED_STRING ab) 'ab') diff --git a/bashast/gunit/param_main.gunit b/bashast/gunit/param_main.gu= nit index 422b7ac..4e30458 100644 --- a/bashast/gunit/param_main.gunit +++ b/bashast/gunit/param_main.gunit @@ -28,12 +28,13 @@ variable_reference: "${asdf:-public_html}" -> (VAR_REF (USE_DEFAULT_WHEN_UNSET_OR_NULL asdf = (STRING public_html))) "${asdf=3D'foo'}" -> (VAR_REF (ASSIGN_DEFAULT_WHEN_UNSET asdf (STRING 'f= oo'))) "${asdf:=3D}" -> (VAR_REF (ASSIGN_DEFAULT_WHEN_UNSET_OR_NULL asdf (STRIN= G EMPTY_EXPANSION_VALUE))) -"${bar:7}" -> (VAR_REF (OFFSET bar 7)) -"${bar: -10}" -> (VAR_REF (OFFSET bar (MINUS_SIGN 10))) -"${bar:(-10 + 5)}" -> (VAR_REF (OFFSET bar (+ (MINUS_SIGN 10) 5))) -"${foo:5:2}" -> (VAR_REF (OFFSET foo 5 2)) -"${foo::2}" -> (VAR_REF (OFFSET foo 0 2)) -"${foo:$((5)):$((2))}" -> (VAR_REF (OFFSET foo 5 2)) +"${bar:7}" -> (VAR_REF (OFFSET bar (OFFSET (ARITHMETIC 7)))) +"${bar: -10}" -> (VAR_REF (OFFSET bar (OFFSET (ARITHMETIC (MINUS_SIGN 10= ))))) +"${bar:(-10 + 5)}" -> (VAR_REF (OFFSET bar (OFFSET (ARITHMETIC (ARITHMET= IC (+ (MINUS_SIGN 10) 5)))))) +"${bar:(-10 + 5, 3)}" -> (VAR_REF (OFFSET bar (OFFSET (ARITHMETIC (ARITH= METIC (+ (MINUS_SIGN 10) 5)) (ARITHMETIC 3))))) +"${foo:5:2}" -> (VAR_REF (OFFSET foo (OFFSET (ARITHMETIC 5)) (OFFSET (AR= ITHMETIC 2)))) +"${foo::2}" -> (VAR_REF (OFFSET foo (OFFSET 0) (OFFSET (ARITHMETIC 2)))) +"${foo:$((5)):$((2))}" -> (VAR_REF (OFFSET foo (OFFSET (ARITHMETIC 5)) (= OFFSET (ARITHMETIC 2)))) "${!asdf*}" -> (VAR_REF (! asdf *)) "${!asdf@}" -> (VAR_REF (! asdf @)) "${!asdf[*]}" -> (VAR_REF (LIST_EXPAND asdf *)) diff --git a/bashast/libbashWalker.g b/bashast/libbashWalker.g index 7c7afaf..9b2281d 100644 --- a/bashast/libbashWalker.g +++ b/bashast/libbashWalker.g @@ -506,16 +506,19 @@ var_expansion returns[std::string libbash_value] libbash_value =3D walker->do_alternate_expansion(walker->is_unset($var= _name.libbash_value), libbash_word); } - |(^(OFFSET array_name arithmetics arithmetics)) =3D> ^(OFFSET libbash_n= ame=3Darray_name offset=3Darithmetics length=3Darithmetics) { + |(^(OFFSET array_name ^(OFFSET arithmetics) ^(OFFSET arithmetics))) =3D= > + ^(OFFSET libbash_name=3Darray_name ^(OFFSET offset=3Darithmetics) ^(OF= FSET length=3Darithmetics)) { libbash_value =3D walker->do_subarray_expansion(libbash_name, offset, = length); } - |(^(OFFSET array_name offset=3Darithmetics)) =3D> ^(OFFSET libbash_name= =3Darray_name offset=3Darithmetics) { + |(^(OFFSET array_name ^(OFFSET offset=3Darithmetics))) =3D> + ^(OFFSET libbash_name=3Darray_name ^(OFFSET offset=3Darithmetics)) { libbash_value =3D walker->do_subarray_expansion(libbash_name, offset); } - |(^(OFFSET var_name arithmetics arithmetics)) =3D> ^(OFFSET var_name of= fset=3Darithmetics length=3Darithmetics) { + |(^(OFFSET var_name ^(OFFSET arithmetics) ^(OFFSET arithmetics))) =3D> + ^(OFFSET var_name ^(OFFSET offset=3Darithmetics) ^(OFFSET length=3Dari= thmetics)) { libbash_value =3D walker->do_substring_expansion($var_name.libbash_val= ue, offset, length, $var_name.index); } - |^(OFFSET var_name offset=3Darithmetics) { + |^(OFFSET var_name ^(OFFSET offset=3Darithmetics)) { libbash_value =3D walker->do_substring_expansion($var_name.libbash_val= ue, offset, $var_name.index); } |^(POUND( @@ -1097,7 +1100,18 @@ primary returns[std::string libbash_value, unsigne= d index] =20 // shell arithmetic // http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.h= tml#tag_18_06_04 + +// We need to branches here because we have to deal with the following t= wo expressions: +// (( a=3D123 )) +// (( a=3D(b=3D123, 4) )) arithmetics returns[long value] + :((ARITHMETIC) =3D> result=3Darithmetic_part { $value =3D result; })+ + |result=3Darithmetic { $value =3D result; }; + +arithmetic_part returns[long value] + :^(ARITHMETIC result=3Darithmetics { $value =3D result; }); + +arithmetic returns[long value] :^(LOGICOR l=3Darithmetics { if(l) { diff --git a/scripts/arithmetic_assignment.bash b/scripts/arithmetic_assi= gnment.bash index 49f6751..d4e678e 100644 --- a/scripts/arithmetic_assignment.bash +++ b/scripts/arithmetic_assignment.bash @@ -23,4 +23,7 @@ d=3D2 e=3D"1+2" echo $(($a + $b)) echo $(($a + $e)) - +(( a=3D1 )) +echo $a +(( a=3D(b=3D2,3) )) +echo $a $b diff --git a/scripts/command_execution.bash b/scripts/command_execution.b= ash index a10d229..e400409 100644 --- a/scripts/command_execution.bash +++ b/scripts/command_execution.bash @@ -78,3 +78,4 @@ o Hello\ echo \`\(\)\$\>\<\` export SRC_URI=3D"${SRC_URI} http://www.oracle.com/technology/products/b= erkeley-db/db/update/${MY_PV}/patch.${MY_PV}.${i}" > /dev/null +(( i=3D1, j=3D2)) && echo $i $j diff --git a/scripts/compound_command.bash b/scripts/compound_command.bas= h index ece5504..0db8ff8 100644 --- a/scripts/compound_command.bash +++ b/scripts/compound_command.bash @@ -351,3 +351,8 @@ case $target in ;; esac echo "case end" + +for((i=3D1,j=3D2;i!=3D2&&j!=3D4;++i)) +do + echo $i $j +done diff --git a/scripts/var_def.bash b/scripts/var_def.bash index 09c07c6..e757b16 100644 --- a/scripts/var_def.bash +++ b/scripts/var_def.bash @@ -31,6 +31,10 @@ echo ${ARRAY02[@]} ARRAY02[2]=3D4 ARRAY02[3]=3D5 echo ${ARRAY02[@]} +ARRAY02[3,2]=3D4 +echo ${ARRAY02[@]} +echo ${ARRAY02[2]} +echo ${ARRAY02[3]} EMPTY=3D echo $EMPTY PARTIAL[5]=3D5 diff --git a/scripts/var_expansion.bash b/scripts/var_expansion.bash index 9f442b1..5f0bfca 100644 --- a/scripts/var_expansion.bash +++ b/scripts/var_expansion.bash @@ -17,6 +17,8 @@ echo ${FOO009: -2} echo ${FOO009:100} echo ${FOO009: -100} echo ${FOO009:(-5 + 5)} +echo ${FOO009:(-5 + 5,0)} +echo ${FOO009:(-5 + 5,1)} echo ${NOT_EXIST:0} echo ${FOO009:0:2} echo ${FOO009:2:2}