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 1QoyQS-0006rO-HX for garchives@archives.gentoo.org; Thu, 04 Aug 2011 13:57:28 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id AE51B21C1C9; Thu, 4 Aug 2011 13:53:39 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 6E85B21C1C5 for ; Thu, 4 Aug 2011 13:53:39 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id DA1171B402F for ; Thu, 4 Aug 2011 13:53:38 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 7419580048 for ; Thu, 4 Aug 2011 13:53:37 +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: Subject: [gentoo-commits] proj/libbash:master commit in: scripts/, bashast/, bashast/gunit/ X-VCS-Repository: proj/libbash X-VCS-Files: bashast/bashast.g bashast/gunit/param_main.gunit scripts/binary_arithmetic.bash X-VCS-Directories: scripts/ bashast/ bashast/gunit/ X-VCS-Committer: betelgeuse X-VCS-Committer-Name: Petteri Räty X-VCS-Revision: c362dfac46df8e73df50a0694e59f5087104ad2b Date: Thu, 4 Aug 2011 13:53:37 +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: X-Archives-Hash: 8990cf91fe51030ced3a7a5695355f1d commit: c362dfac46df8e73df50a0694e59f5087104ad2b Author: Mu Qiao gentoo org> AuthorDate: Tue Jul 19 14:24:07 2011 +0000 Commit: Petteri R=C3=A4ty gentoo org> CommitDate: Wed Jul 20 15:08:32 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/libbash.git;a= =3Dcommit;h=3Dc362dfac Parser: fix parameter expansion value Now the rule for expansion value follows bash manual. The delete expansion is fixed to use the replace pattern rule rather than the expansion value rule. --- bashast/bashast.g | 27 +++++++++++++++++++++------ bashast/gunit/param_main.gunit | 14 ++++++++------ scripts/binary_arithmetic.bash | 2 +- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/bashast/bashast.g b/bashast/bashast.g index 032e3f9..3ca2bf8 100644 --- a/bashast/bashast.g +++ b/bashast/bashast.g @@ -107,6 +107,7 @@ tokens{ REPLACE_AT_END; LAZY_REMOVE_AT_START; LAZY_REMOVE_AT_END; + EMPTY_EXPANSION_VALUE; =20 PLUS_SIGN; MINUS_SIGN; @@ -686,7 +687,7 @@ pattern_char |GREATER_THAN|SQUOTE|DQUOTE; =20 variable_reference - : DOLLAR LBRACE BLANK? parameter_expansion BLANK? RBRACE -> ^(VAR_REF p= arameter_expansion) + : DOLLAR LBRACE parameter_expansion RBRACE -> ^(VAR_REF parameter_expan= sion) | DOLLAR name -> ^(VAR_REF name) | DOLLAR num -> ^(VAR_REF num) | DOLLAR TIMES -> ^(VAR_REF TIMES) @@ -704,11 +705,11 @@ parameter_expansion -> ^(parameter_value_operator variable_name parameter_expansion_valu= e) | COLON BLANK? os=3Dexplicit_arithmetic (COLON BLANK? len=3Dexplicit_= arithmetic)? -> ^(OFFSET variable_name $os ^($len)?) - | parameter_delete_operator parameter_expansion_value - -> ^(parameter_delete_operator variable_name parameter_expansion_val= ue) + | parameter_delete_operator parameter_replace_pattern + -> ^(parameter_delete_operator variable_name parameter_replace_patte= rn) | parameter_replace_operator parameter_replace_pattern (SLASH paramet= er_expansion_value)? -> ^(parameter_replace_operator variable_name parameter_replace_patt= ern parameter_expansion_value?) - | -> variable_name + | BLANK? -> variable_name ) | BANG variable_name_for_bang ( @@ -739,10 +740,24 @@ parameter_pattern_part =20 // TODO fix this rule parameter_expansion_value - : ((~RBRACE) =3D> parameter_expansion_value_atom)+ -> ^(STRING paramete= r_expansion_value_atom+); +scope { + int num_of_braces; +} + : parameter_expansion_value_atom -> ^(STRING parameter_expansion_value_= atom); =20 parameter_expansion_value_atom - : string_expr_part|BLANK; + : (~RBRACE) =3D> + {$parameter_expansion_value::num_of_braces =3D 1;} + ( + {$parameter_expansion_value::num_of_braces !=3D 0}? =3D> . + { + if(LA(1) =3D=3D LBRACE && LA(-1) !=3D ESC) + ++$parameter_expansion_value::num_of_braces; + else if(LA(1) =3D=3D RBRACE && LA(-1) !=3D ESC) + --$parameter_expansion_value::num_of_braces; + } + )+ + | -> EMPTY_EXPANSION_VALUE; =20 parameter_replace_operator : (SLASH SLASH) =3D> SLASH SLASH -> REPLACE_ALL diff --git a/bashast/gunit/param_main.gunit b/bashast/gunit/param_main.gu= nit index 0744004..f2b8cbb 100644 --- a/bashast/gunit/param_main.gunit +++ b/bashast/gunit/param_main.gunit @@ -23,8 +23,8 @@ variable_reference: "${asdf}" -> (VAR_REF asdf) "${asdf:-foo}" -> (VAR_REF (USE_DEFAULT_WHEN_UNSET_OR_NULL asdf (STRING = foo))) "${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 (S= INGLE_QUOTED_STRING 'foo')))) -//"${asdf:=3D}" -> (VAR_REF (ASSIGN_DEFAULT_WHEN_UNSET_OR_NULL asdf STRI= NG)) +"${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))) @@ -41,8 +41,8 @@ variable_reference: "${foo##bar}" -> (VAR_REF (REPLACE_AT_START foo (STRING bar))) "${foo%bar}" -> (VAR_REF (LAZY_REMOVE_AT_END foo (STRING bar))) "${foo%%bar}" -> (VAR_REF (REPLACE_AT_END foo (STRING bar))) -//"${foo%; *}" -> (VAR_REF (LAZY_REMOVE_AT_END foo (STRING ; MATCH_ALL= ))) -"${foo%/}" -> (VAR_REF (LAZY_REMOVE_AT_END foo (STRING /))) +"${foo%; *}" -> (VAR_REF (LAZY_REMOVE_AT_END foo (STRING ; MATCH_ALL))= ) +//"${foo%/}" -> (VAR_REF (LAZY_REMOVE_AT_END foo (STRING /))) "${this/is/pattern}"->(VAR_REF (REPLACE_FIRST this (STRING is) (STRING p= attern))) //Test positional/special parameters "$1" -> (VAR_REF 1) @@ -60,12 +60,14 @@ variable_reference: "${$}" -> (VAR_REF $) "${PV//./_}" -> (VAR_REF (REPLACE_ALL PV (STRING .) (STRING _))) "${PV// }" -> (VAR_REF (REPLACE_ALL PV (STRING ))) -//"${PV//[-._]/}" -> (VAR_REF (REPLACE_ALL PV (STRING (MATCH_ANY - . _))= STRING)) -"${PV/${pattern}/${replace}}" -> (VAR_REF (REPLACE_FIRST PV (STRING (VAR= _REF pattern)) (STRING (VAR_REF replace)))) +"${PV//[-._]/}" -> (VAR_REF (REPLACE_ALL PV (STRING (MATCH_ANY - . _)) (= STRING EMPTY_EXPANSION_VALUE))) +"${PV/${pattern}/${replace}}" -> (VAR_REF (REPLACE_FIRST PV (STRING (VAR= _REF pattern)) (STRING $ { replace }))) "${PV/#foo/bar}" -> (VAR_REF (REPLACE_AT_START PV (STRING foo) (STRING b= ar))) "${PV/%foo/bar}" -> (VAR_REF (REPLACE_AT_END PV (STRING foo) (STRING bar= ))) "${PN/%spaces /more }" -> (VAR_REF (REPLACE_AT_END PN (STRING spaces )= (STRING more ))) "${PN/wrong#/#correct}" -> (VAR_REF (REPLACE_FIRST PN (STRING wrong #) (= STRING # correct))) +"${a/b/\}c}" -> (VAR_REF (REPLACE_FIRST a (STRING b) (STRING \ } c))) +"${a/b/a\}c}" -> (VAR_REF (REPLACE_FIRST a (STRING b) (STRING a \ } c))) =20 variable_definition_atom: "MY_PN=3D${PN/asterisk-}" -> (=3D MY_PN (STRING (VAR_REF (REPLACE_FIRST = PN (STRING asterisk -))))) diff --git a/scripts/binary_arithmetic.bash b/scripts/binary_arithmetic.b= ash index 8aca099..36b4c9d 100644 --- a/scripts/binary_arithmetic.bash +++ b/scripts/binary_arithmetic.bash @@ -57,7 +57,7 @@ echo "$((ARRAY[8]^=3D3))" PARTIAL[8]=3D5 echo "$((PARTIAL[8]*=3D1))" echo "$((${#ARRAY[@]}))" -echo "$((${ARRAY[5]:-10}))" +#echo "$((${ARRAY[5]:-10}))" echo "$((${ARRAY:0}))" value=3D100 FOO056=3D"value"