mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-22 07:30:43 +00:00
print iterate
This commit is contained in:
parent
e96ed050e3
commit
2d025eb17c
6 changed files with 38 additions and 1 deletions
|
|
@ -172,6 +172,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
|
|||
case MD_AST_NODE_TYPE_EMITP: return "emitp"; break;
|
||||
case MD_AST_NODE_TYPE_EMIT: return "emit"; break;
|
||||
case MD_AST_NODE_TYPE_DUMP: return "dump"; break;
|
||||
case MD_AST_NODE_TYPE_PRINT: return "print"; break;
|
||||
case MD_AST_NODE_TYPE_ALL: return "all"; break;
|
||||
case MD_AST_NODE_TYPE_ENV: return "env"; break;
|
||||
case MD_AST_NODE_TYPE_WHILE: return "while"; break;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ typedef enum _mlr_dsl_ast_node_type_t {
|
|||
MD_AST_NODE_TYPE_EMITP,
|
||||
MD_AST_NODE_TYPE_EMIT,
|
||||
MD_AST_NODE_TYPE_DUMP,
|
||||
MD_AST_NODE_TYPE_PRINT,
|
||||
MD_AST_NODE_TYPE_ALL,
|
||||
MD_AST_NODE_TYPE_NOP, // only for parser internals; should not be in the AST returned by the parser
|
||||
MD_AST_NODE_TYPE_WHILE,
|
||||
|
|
|
|||
|
|
@ -55,6 +55,10 @@
|
|||
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DUMP);
|
||||
return MD_TOKEN_DUMP;
|
||||
}
|
||||
"print" {
|
||||
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINT);
|
||||
return MD_TOKEN_PRINT;
|
||||
}
|
||||
"begin" {
|
||||
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
|
||||
return MD_TOKEN_BEGIN;
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@ md_statement_not_braced_end ::= md_emitf.
|
|||
md_statement_not_braced_end ::= md_emitp.
|
||||
md_statement_not_braced_end ::= md_emit.
|
||||
md_statement_not_braced_end ::= md_dump.
|
||||
md_statement_not_braced_end ::= md_print.
|
||||
|
||||
// Valid only within for/while, but we accept them here syntactically and reject them in the AST-to-CST
|
||||
// conversion, where we can produce much more informative error messages:
|
||||
|
|
@ -650,6 +651,9 @@ md_emit_args(A) ::= md_emit_args(B) MD_TOKEN_COMMA md_rhs(C). {
|
|||
md_dump(A) ::= MD_TOKEN_DUMP(O). {
|
||||
A = mlr_dsl_ast_node_alloc_zary(O->text, MD_AST_NODE_TYPE_DUMP);
|
||||
}
|
||||
md_print(A) ::= MD_TOKEN_PRINT(O) md_rhs(B). {
|
||||
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_PRINT, B);
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
// Begin RHS precedence chain
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ static mlr_dsl_cst_statement_t* alloc_break(mlr_dsl_a
|
|||
static mlr_dsl_cst_statement_t* alloc_continue(mlr_dsl_ast_node_t* pnode, int ti, int cf);
|
||||
static mlr_dsl_cst_statement_t* alloc_filter(mlr_dsl_ast_node_t* pnode, int ti, int cf);
|
||||
static mlr_dsl_cst_statement_t* alloc_dump(mlr_dsl_ast_node_t* pnode, int ti, int cf);
|
||||
static mlr_dsl_cst_statement_t* alloc_print(mlr_dsl_ast_node_t* pnode, int ti, int cf);
|
||||
static mlr_dsl_cst_statement_t* alloc_bare_boolean(mlr_dsl_ast_node_t* pnode, int ti, int cf);
|
||||
|
||||
static mlr_dsl_cst_statement_t* alloc_if_item(
|
||||
|
|
@ -69,6 +70,7 @@ static void handle_emitp_all(mlr_dsl_cst_statement_t* s,
|
|||
static void handle_emit(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o);
|
||||
static void handle_emit_all(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o);
|
||||
static void handle_dump(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o);
|
||||
static void handle_print(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o);
|
||||
static void handle_filter(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o);
|
||||
static void handle_conditional_block(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o);
|
||||
static void handle_while(mlr_dsl_cst_statement_t* s, variables_t* v, cst_outputs_t* o);
|
||||
|
|
@ -401,6 +403,9 @@ static mlr_dsl_cst_statement_t* alloc_cst_statement(mlr_dsl_ast_node_t* pnode, i
|
|||
case MD_AST_NODE_TYPE_DUMP:
|
||||
return alloc_dump(pnode, type_inferencing, context_flags);
|
||||
break;
|
||||
case MD_AST_NODE_TYPE_PRINT:
|
||||
return alloc_print(pnode, type_inferencing, context_flags);
|
||||
break;
|
||||
default:
|
||||
return alloc_bare_boolean(pnode, type_inferencing, context_flags);
|
||||
break;
|
||||
|
|
@ -1080,6 +1085,7 @@ static mlr_dsl_cst_statement_t* alloc_filter(mlr_dsl_ast_node_t* pnode, int type
|
|||
return pstatement;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static mlr_dsl_cst_statement_t* alloc_dump(mlr_dsl_ast_node_t* pnode, int type_inferencing,
|
||||
int context_flags)
|
||||
{
|
||||
|
|
@ -1089,6 +1095,18 @@ static mlr_dsl_cst_statement_t* alloc_dump(mlr_dsl_ast_node_t* pnode, int type_i
|
|||
return pstatement;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static mlr_dsl_cst_statement_t* alloc_print(mlr_dsl_ast_node_t* pnode, int type_inferencing,
|
||||
int context_flags)
|
||||
{
|
||||
mlr_dsl_cst_statement_t* pstatement = alloc_blank();
|
||||
|
||||
pstatement->pnode_handler = handle_print;
|
||||
// xxx
|
||||
return pstatement;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static mlr_dsl_cst_statement_t* alloc_bare_boolean(mlr_dsl_ast_node_t* pnode, int type_inferencing,
|
||||
int context_flags)
|
||||
{
|
||||
|
|
@ -1603,6 +1621,15 @@ static void handle_dump(
|
|||
mlhmmv_print_json_stacked(pvars->poosvars, FALSE);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static void handle_print(
|
||||
mlr_dsl_cst_statement_t* pnode,
|
||||
variables_t* pvars,
|
||||
cst_outputs_t* pcst_outputs)
|
||||
{
|
||||
printf("STUB\n");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static void handle_filter(
|
||||
mlr_dsl_cst_statement_t* pnode,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ TOP OF LIST:
|
|||
! heterogenize feature?
|
||||
|
||||
COOKBOOK:
|
||||
* cookbook example: key<->val inverter
|
||||
* cookbook https://github.com/johnkerl/miller/issues/103 to fix up short csv data lines
|
||||
mlr --from jb.csv --fs comma --nidx put '
|
||||
@maxnf = max(@maxnf, NF);
|
||||
|
|
@ -21,6 +20,7 @@ COOKBOOK:
|
|||
$[@nf] = ""
|
||||
}
|
||||
'
|
||||
* rename example also w/ for-srec?
|
||||
|
||||
gentoo? http://euscan.gentooexperimental.org/package/sys-apps/miller/
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue