mirror of
https://github.com/johnkerl/miller.git
synced 2026-08-01 04:01:58 +00:00
neaten
This commit is contained in:
parent
9e623c9341
commit
dbb3a5a620
4 changed files with 29 additions and 28 deletions
5
go/ppp
5
go/ppp
|
|
@ -13,9 +13,8 @@ echo; mlr parse '$x = "abc"'
|
|||
echo; mlr parse '$["abc"] = "def"'
|
||||
echo; mlr parse '$[FILENAME] = FNR'
|
||||
echo; mlr parse '$x = $a + $b + $c'
|
||||
echo; mlr parse '$x = ($a + $b) + $c'
|
||||
echo; mlr parse '$x = $a + ($b + $c)'
|
||||
echo; mlr parse '$x = $a + ($b)+ $c'
|
||||
echo; mlr parse '$x = ($a + $b) + $c; $y = $a + ($b + $c); $z = $a + ($b)+ $c'
|
||||
echo; mlr parse '$x = (NF + NR) * 7; $y = OFS . $y . "hello"'
|
||||
|
||||
#echo; mlr parse '$x = 2 * $a + $b . $c'
|
||||
#echo; mlr parse '$x = 2 * $a + ($b . $c)'
|
||||
|
|
|
|||
|
|
@ -8,9 +8,15 @@ import (
|
|||
type TNodeType string
|
||||
|
||||
const (
|
||||
NodeTypeStringLiteral = "StringLiteral"
|
||||
NodeTypeNumberLiteral = "NumberLiteral"
|
||||
NodeTypeBooleanLiteral = "BooleanLiteral"
|
||||
|
||||
NodeTypeDirectFieldName = "DirectFieldName"
|
||||
NodeTypeIndirectFieldName = "IndirectFieldName"
|
||||
|
||||
NodeTypeStatementBlock = "StatementBlock"
|
||||
NodeTypeStatement = "Statement"
|
||||
NodeTypeToken = "Token"
|
||||
NodeTypeAssignment = "Assignment"
|
||||
NodeTypeOperator = "Operator"
|
||||
NodeTypeFieldName = "FieldName"
|
||||
|
|
|
|||
|
|
@ -2512,18 +2512,18 @@ FieldName
|
|||
: DirectFieldName
|
||||
| IndirectFieldName
|
||||
//| BracedFieldName
|
||||
// PositionalFieldName
|
||||
//| PositionalFieldName
|
||||
// ...
|
||||
;
|
||||
|
||||
DirectFieldName
|
||||
: md_token_field_name
|
||||
<< dsl.NewASTNode($0, dsl.NodeTypeToken) >>
|
||||
<< dsl.NewASTNode($0, dsl.NodeTypeDirectFieldName) >>
|
||||
;
|
||||
|
||||
IndirectFieldName
|
||||
: "$[" RHS "]"
|
||||
<< dsl.NewASTNodeUnary($0, $1, dsl.NodeTypeToken) >>
|
||||
<< dsl.NewASTNodeUnary($0, $1, dsl.NodeTypeIndirectFieldName) >>
|
||||
;
|
||||
|
||||
//// xxx make a token-wrap constructor in the API
|
||||
|
|
@ -2539,16 +2539,12 @@ IndirectFieldName
|
|||
//AtomOrFunction(A) ::= PositionalSrecName(B). {
|
||||
// A = B;
|
||||
//}
|
||||
//PositionalSrecName(A) ::= md_token_dollar_sign
|
||||
// md_token_left_bracket md_token_left_bracket
|
||||
// RHS(B)
|
||||
// md_token_right_bracket md_token_right_bracket. {
|
||||
//PositionalSrecName(A) ::= "$[[" RHS "]]"
|
||||
// A = mlr_dsl_ast_node_alloc_unary(
|
||||
// "positional_srec_field_name",
|
||||
// MD_AST_NODE_TYPE_POSITIONAL_SREC_NAME,
|
||||
// B
|
||||
// );
|
||||
//}
|
||||
|
||||
//// '$value = $[[[3]]]' is shorthand for '$value = $[ $[[3]] ]'.
|
||||
//// Note that '$[[3]]' is key at srec position 3 and '$[[[3]]]' is value at srec position 3.
|
||||
|
|
@ -2619,16 +2615,16 @@ IndirectFieldName
|
|||
// to the lrecs, with mlrvals there! :)
|
||||
|
||||
AtomOrFunction
|
||||
: md_token_number << dsl.NewASTNode($0, dsl.NodeTypeToken) >> ;
|
||||
: md_token_number << dsl.NewASTNode($0, dsl.NodeTypeNumberLiteral) >> ;
|
||||
|
||||
AtomOrFunction
|
||||
: md_token_string << dsl.NewASTNode($0, dsl.NodeTypeToken) >> ;
|
||||
: md_token_string << dsl.NewASTNode($0, dsl.NodeTypeStringLiteral) >> ;
|
||||
|
||||
AtomOrFunction
|
||||
: md_token_true << dsl.NewASTNode($0, dsl.NodeTypeToken) >> ;
|
||||
: md_token_true << dsl.NewASTNode($0, dsl.NodeTypeBooleanLiteral) >> ;
|
||||
|
||||
AtomOrFunction
|
||||
: md_token_false << dsl.NewASTNode($0, dsl.NodeTypeToken) >> ;
|
||||
: md_token_false << dsl.NewASTNode($0, dsl.NodeTypeBooleanLiteral) >> ;
|
||||
|
||||
//AtomOrFunction(A) ::= md_regexi(B). {
|
||||
// A = B;
|
||||
|
|
|
|||
|
|
@ -811,63 +811,63 @@ var productionsTable = ProdTab{
|
|||
},
|
||||
},
|
||||
ProdTabEntry{
|
||||
String: `DirectFieldName : md_token_field_name << dsl.NewASTNode(X[0], dsl.NodeTypeToken) >>`,
|
||||
String: `DirectFieldName : md_token_field_name << dsl.NewASTNode(X[0], dsl.NodeTypeDirectFieldName) >>`,
|
||||
Id: "DirectFieldName",
|
||||
NTType: 23,
|
||||
Index: 79,
|
||||
NumSymbols: 1,
|
||||
ReduceFunc: func(X []Attrib) (Attrib, error) {
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeToken)
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeDirectFieldName)
|
||||
},
|
||||
},
|
||||
ProdTabEntry{
|
||||
String: `IndirectFieldName : "$[" RHS "]" << dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeToken) >>`,
|
||||
String: `IndirectFieldName : "$[" RHS "]" << dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeIndirectFieldName) >>`,
|
||||
Id: "IndirectFieldName",
|
||||
NTType: 24,
|
||||
Index: 80,
|
||||
NumSymbols: 3,
|
||||
ReduceFunc: func(X []Attrib) (Attrib, error) {
|
||||
return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeToken)
|
||||
return dsl.NewASTNodeUnary(X[0], X[1], dsl.NodeTypeIndirectFieldName)
|
||||
},
|
||||
},
|
||||
ProdTabEntry{
|
||||
String: `AtomOrFunction : md_token_number << dsl.NewASTNode(X[0], dsl.NodeTypeToken) >>`,
|
||||
String: `AtomOrFunction : md_token_number << dsl.NewASTNode(X[0], dsl.NodeTypeNumberLiteral) >>`,
|
||||
Id: "AtomOrFunction",
|
||||
NTType: 21,
|
||||
Index: 81,
|
||||
NumSymbols: 1,
|
||||
ReduceFunc: func(X []Attrib) (Attrib, error) {
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeToken)
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeNumberLiteral)
|
||||
},
|
||||
},
|
||||
ProdTabEntry{
|
||||
String: `AtomOrFunction : md_token_string << dsl.NewASTNode(X[0], dsl.NodeTypeToken) >>`,
|
||||
String: `AtomOrFunction : md_token_string << dsl.NewASTNode(X[0], dsl.NodeTypeStringLiteral) >>`,
|
||||
Id: "AtomOrFunction",
|
||||
NTType: 21,
|
||||
Index: 82,
|
||||
NumSymbols: 1,
|
||||
ReduceFunc: func(X []Attrib) (Attrib, error) {
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeToken)
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeStringLiteral)
|
||||
},
|
||||
},
|
||||
ProdTabEntry{
|
||||
String: `AtomOrFunction : md_token_true << dsl.NewASTNode(X[0], dsl.NodeTypeToken) >>`,
|
||||
String: `AtomOrFunction : md_token_true << dsl.NewASTNode(X[0], dsl.NodeTypeBooleanLiteral) >>`,
|
||||
Id: "AtomOrFunction",
|
||||
NTType: 21,
|
||||
Index: 83,
|
||||
NumSymbols: 1,
|
||||
ReduceFunc: func(X []Attrib) (Attrib, error) {
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeToken)
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeBooleanLiteral)
|
||||
},
|
||||
},
|
||||
ProdTabEntry{
|
||||
String: `AtomOrFunction : md_token_false << dsl.NewASTNode(X[0], dsl.NodeTypeToken) >>`,
|
||||
String: `AtomOrFunction : md_token_false << dsl.NewASTNode(X[0], dsl.NodeTypeBooleanLiteral) >>`,
|
||||
Id: "AtomOrFunction",
|
||||
NTType: 21,
|
||||
Index: 84,
|
||||
NumSymbols: 1,
|
||||
ReduceFunc: func(X []Attrib) (Attrib, error) {
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeToken)
|
||||
return dsl.NewASTNode(X[0], dsl.NodeTypeBooleanLiteral)
|
||||
},
|
||||
},
|
||||
ProdTabEntry{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue