This commit is contained in:
John Kerl 2020-08-30 13:11:04 -04:00
parent 9e623c9341
commit dbb3a5a620
4 changed files with 29 additions and 28 deletions

5
go/ppp
View file

@ -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)'

View file

@ -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"

View file

@ -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;

View file

@ -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{