From d485125c210ab46ccda1740d73424b619ada28bf Mon Sep 17 00:00:00 2001 From: John Kerl Date: Fri, 11 Mar 2016 11:04:11 -0800 Subject: [PATCH] oosvar/emit/unset/$* UT iterate --- c/dsls/mlr_dsl_parse.y | 8 + c/reg_test/expected/out | 324 ++++++++++++++++++++++++++++++++++++++++ c/reg_test/run | 40 ++++- 3 files changed, 368 insertions(+), 4 deletions(-) diff --git a/c/dsls/mlr_dsl_parse.y b/c/dsls/mlr_dsl_parse.y index 8345e63e6..210b80e95 100644 --- a/c/dsls/mlr_dsl_parse.y +++ b/c/dsls/mlr_dsl_parse.y @@ -121,6 +121,8 @@ md_cond_block_statements(A) ::= md_cond_block_statements(B) MD_TOKEN_SEMICOLON m md_cond_block_statement ::= md_cond_block_srec_assignment. md_cond_block_statement ::= md_cond_block_oosvar_assignment. +md_cond_block_statement ::= md_cond_block_oosvar_from_full_srec_assignment. +md_cond_block_statement ::= md_cond_block_full_srec_from_oosvar_assignment. md_cond_block_statement ::= md_cond_block_emitf. md_cond_block_statement ::= md_cond_block_emit. md_cond_block_statement ::= md_cond_block_dump. @@ -209,6 +211,12 @@ md_cond_block_srec_assignment(A) ::= md_srec_assignment(B). { md_cond_block_oosvar_assignment(A) ::= md_oosvar_assignment(B). { A = B; } +md_cond_block_oosvar_from_full_srec_assignment(A) ::= md_oosvar_from_full_srec_assignment(B). { + A = B; +} +md_cond_block_full_srec_from_oosvar_assignment(A) ::= md_full_srec_from_oosvar_assignment(B). { + A = B; +} md_cond_block_emitf(A) ::= md_emitf(B). { A = B; } diff --git a/c/reg_test/expected/out b/c/reg_test/expected/out index 01968ffa3..cdc037812 100644 --- a/c/reg_test/expected/out +++ b/c/reg_test/expected/out @@ -13519,6 +13519,74 @@ a=hat,b=wye,sum= ================================================================ OOSVAR-FROM-SREC ASSIGNMENT +mlr put -v @v = $* /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (oosvar_from_full_srec_assignment): + v (oosvar_name). + $* (full_srec). +AST END STATEMENTS (0): + +mlr put -v @v[1] = $* /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (oosvar_from_full_srec_assignment): + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). + $* (full_srec). +AST END STATEMENTS (0): + +mlr put -v @v[$2] = $* /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (oosvar_from_full_srec_assignment): + [] (oosvar_level_key): + v (oosvar_name). + 2 (field_name). + $* (full_srec). +AST END STATEMENTS (0): + +mlr put -v NR == 3 {@v = $*} /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (oosvar_from_full_srec_assignment): + v (oosvar_name). + $* (full_srec). +AST END STATEMENTS (0): + +mlr put -v NR == 3 {@v[1] = $*} /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (oosvar_from_full_srec_assignment): + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). + $* (full_srec). +AST END STATEMENTS (0): + +mlr put -v NR == 3 {@v[$2] = $*} /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (oosvar_from_full_srec_assignment): + [] (oosvar_level_key): + v (oosvar_name). + 2 (field_name). + $* (full_srec). +AST END STATEMENTS (0): + mlr --oxtab put -q @v = $*; end {emit @v } ./reg_test/input/abixy-het v:a pan v:b wye @@ -13730,10 +13798,266 @@ v:yyy 0.976181385699006 ================================================================ SREC-FROM-OOSVAR ASSIGNMENT +mlr put -v $* = @v /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (full_srec_from_oosvar_assignment): + $* (full_srec). + v (oosvar_name). +AST END STATEMENTS (0): + +mlr put -v $* = @v[1] /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (full_srec_from_oosvar_assignment): + $* (full_srec). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST END STATEMENTS (0): + +mlr put -v $* = @v[$2] /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (full_srec_from_oosvar_assignment): + $* (full_srec). + [] (oosvar_level_key): + v (oosvar_name). + 2 (field_name). +AST END STATEMENTS (0): + +mlr put -v NR == 3 {$* = @v } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (full_srec_from_oosvar_assignment): + $* (full_srec). + v (oosvar_name). +AST END STATEMENTS (0): + +mlr put -v NR == 3 {$* = @v[1] } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (full_srec_from_oosvar_assignment): + $* (full_srec). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST END STATEMENTS (0): + +mlr put -v NR == 3 {$* = @v[$2]} /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (full_srec_from_oosvar_assignment): + $* (full_srec). + [] (oosvar_level_key): + v (oosvar_name). + 2 (field_name). +AST END STATEMENTS (0): + +mlr put @v[NR] = $a; NR == 7 { @v = $*} ; $* = @v ./reg_test/input/abixy-het +1=pan +1=pan,2=eks +1=pan,2=eks,3= +1=pan,2=eks,3=,4=eks +1=pan,2=eks,3=,4=eks,5=wye +1=pan,2=eks,3=,4=eks,5=wye,6=zee +1=pan,2=eks,3=,4=eks,5=wye,6=zee,7=eks,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694 +1=pan,2=eks,3=,4=eks,5=wye,6=zee,7=eks,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee +1=pan,2=eks,3=,4=eks,5=wye,6=zee,7=eks,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee,9= +1=pan,2=eks,3=,4=eks,5=wye,6=zee,7=eks,a=eks,b=zee,iii=7,x=0.6117840605678454,y=0.1878849191181694,8=zee,9=,10=pan + ================================================================ OOSVAR-FROM-OOSVAR ASSIGNMENT +mlr put -v @u = @v /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (oosvar_assignment): + u (oosvar_name). + v (oosvar_name). +AST END STATEMENTS (0): + +mlr put -v @u = @v[1] /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (oosvar_assignment): + u (oosvar_name). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST END STATEMENTS (0): + +mlr put -v @u[2] = @v /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + v (oosvar_name). +AST END STATEMENTS (0): + +mlr put -v @u[2] = @v[1] /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): += (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST END STATEMENTS (0): + +mlr put -v begin { @u = @v } /dev/null +AST BEGIN STATEMENTS (1): += (oosvar_assignment): + u (oosvar_name). + v (oosvar_name). +AST MAIN STATEMENTS (0): +AST END STATEMENTS (0): + +mlr put -v begin { @u = @v[1] } /dev/null +AST BEGIN STATEMENTS (1): += (oosvar_assignment): + u (oosvar_name). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST MAIN STATEMENTS (0): +AST END STATEMENTS (0): + +mlr put -v begin { @u[2] = @v } /dev/null +AST BEGIN STATEMENTS (1): += (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + v (oosvar_name). +AST MAIN STATEMENTS (0): +AST END STATEMENTS (0): + +mlr put -v begin { @u[2] = @v[1] } /dev/null +AST BEGIN STATEMENTS (1): += (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST MAIN STATEMENTS (0): +AST END STATEMENTS (0): + +mlr put -v NR == 3 { @u = @v } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (oosvar_assignment): + u (oosvar_name). + v (oosvar_name). +AST END STATEMENTS (0): + +mlr put -v NR == 3 { @u = @v[1] } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (oosvar_assignment): + u (oosvar_name). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST END STATEMENTS (0): + +mlr put -v NR == 3 { @u[2] = @v } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + v (oosvar_name). +AST END STATEMENTS (0): + +mlr put -v NR == 3 { @u[2] = @v[1] } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (1): +cond (conditional_block): + == (operator): + NR (context_variable). + 3 (strnum_literal). + = (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). +AST END STATEMENTS (0): + +mlr put -v end { @u = @v } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (0): +AST END STATEMENTS (1): += (oosvar_assignment): + u (oosvar_name). + v (oosvar_name). + +mlr put -v end { @u = @v[1] } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (0): +AST END STATEMENTS (1): += (oosvar_assignment): + u (oosvar_name). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). + +mlr put -v end { @u[2] = @v } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (0): +AST END STATEMENTS (1): += (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + v (oosvar_name). + +mlr put -v end { @u[2] = @v[1] } /dev/null +AST BEGIN STATEMENTS (0): +AST MAIN STATEMENTS (0): +AST END STATEMENTS (1): += (oosvar_assignment): + [] (oosvar_level_key): + u (oosvar_name). + 2 (strnum_literal). + [] (oosvar_level_key): + v (oosvar_name). + 1 (strnum_literal). + mlr put -q @s += $i; @t=@s; end{dump; emit@s; emit @t} ./reg_test/input/abixy { "s": 55, diff --git a/c/reg_test/run b/c/reg_test/run index c98496eb7..db2e60552 100755 --- a/c/reg_test/run +++ b/c/reg_test/run @@ -1346,6 +1346,13 @@ run_mlr put -q '@sum[$a][$b] += $nonesuch; end {emit @sum, "a", "b", "extra" }' # ---------------------------------------------------------------- announce OOSVAR-FROM-SREC ASSIGNMENT +run_mlr put -v '@v = $*' /dev/null +run_mlr put -v '@v[1] = $*' /dev/null +run_mlr put -v '@v[$2] = $*' /dev/null +run_mlr put -v 'NR == 3 {@v = $*}' /dev/null +run_mlr put -v 'NR == 3 {@v[1] = $*}' /dev/null +run_mlr put -v 'NR == 3 {@v[$2] = $*}' /dev/null + run_mlr --oxtab put -q '@v = $*; end {emit @v }' $indir/abixy-het run_mlr --oxtab put -q '@v[$a] = $*; end {emit @v }' $indir/abixy-het @@ -1358,13 +1365,40 @@ run_mlr --oxtab put -q '@v[$a][$b] = $*; end {emit @v, "a", "b"}' $indir/abixy-h # ---------------------------------------------------------------- announce SREC-FROM-OOSVAR ASSIGNMENT -#run_mlr --oxtab put -q 'begin { @v[1] = "nonesuch" }; NR == 3 { @v = $*} ; $* = @v' $indir/abixy-het +run_mlr put -v '$* = @v ' /dev/null +run_mlr put -v '$* = @v[1] ' /dev/null +run_mlr put -v '$* = @v[$2]' /dev/null +run_mlr put -v 'NR == 3 {$* = @v }' /dev/null +run_mlr put -v 'NR == 3 {$* = @v[1] }' /dev/null +run_mlr put -v 'NR == 3 {$* = @v[$2]}' /dev/null + +run_mlr put '@v[NR] = $a; NR == 7 { @v = $*} ; $* = @v' $indir/abixy-het # ---------------------------------------------------------------- announce OOSVAR-FROM-OOSVAR ASSIGNMENT -run_mlr put -q '@s += $i; @t=@s; end{dump; emit@s; emit @t}' $indir/abixy +run_mlr put -v '@u = @v' /dev/null +run_mlr put -v '@u = @v[1]' /dev/null +run_mlr put -v '@u[2] = @v' /dev/null +run_mlr put -v '@u[2] = @v[1]' /dev/null +run_mlr put -v 'begin { @u = @v }' /dev/null +run_mlr put -v 'begin { @u = @v[1] }' /dev/null +run_mlr put -v 'begin { @u[2] = @v }' /dev/null +run_mlr put -v 'begin { @u[2] = @v[1] }' /dev/null + +run_mlr put -v 'NR == 3 { @u = @v }' /dev/null +run_mlr put -v 'NR == 3 { @u = @v[1] }' /dev/null +run_mlr put -v 'NR == 3 { @u[2] = @v }' /dev/null +run_mlr put -v 'NR == 3 { @u[2] = @v[1] }' /dev/null + +run_mlr put -v 'end { @u = @v }' /dev/null +run_mlr put -v 'end { @u = @v[1] }' /dev/null +run_mlr put -v 'end { @u[2] = @v }' /dev/null +run_mlr put -v 'end { @u[2] = @v[1] }' /dev/null + + +run_mlr put -q '@s += $i; @t=@s; end{dump; emit@s; emit @t}' $indir/abixy run_mlr put -q '@s[1] += $i; @t=@s; end{dump; emit@s; emit @t}' $indir/abixy run_mlr put -q '@s[1] += $i; @t=@s[1]; end{dump; emit@s; emit @t}' $indir/abixy @@ -1372,7 +1406,6 @@ run_mlr put -q '@s[1] += $i; @t=@s[1]; end{dump; emit@s; emit @t}' $ind run_mlr put -q '@s[1] += $i; @t[3]=@s; end{dump; emit@s; emit @t}' $indir/abixy run_mlr put -q '@s[1] += $i; @t[3]=@s[1]; end{dump; emit@s; emit @t}' $indir/abixy - run_mlr put -q '@s[1][2] += $i; @t=@s; end{dump; emit@s; emit @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t=@s[1]; end{dump; emit@s; emit @t}' $indir/abixy run_mlr put -q '@s[1][2] += $i; @t=@s[1][2]; end{dump; emit@s; emit @t}' $indir/abixy @@ -1387,7 +1420,6 @@ run_mlr put -q '@s[1][2] += $i; @t[3][4]=@s[1][2]; end{dump; emit@s; emit @t}' $ run_mlr --opprint put -q '@s[NR][NR] = $i/100; @t[NR*10]=@s; end{emit@s,"A","B"; emit @t,"C","D","E"}' $indir/abixy - # ---------------------------------------------------------------- announce CHAINING