diff --git a/go/ppp b/go/ppp index e1c23413a..791a166f3 100755 --- a/go/ppp +++ b/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)' diff --git a/go/src/miller/dsl/ast.go b/go/src/miller/dsl/ast.go index 56d0a95cc..ca597822b 100644 --- a/go/src/miller/dsl/ast.go +++ b/go/src/miller/dsl/ast.go @@ -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" diff --git a/go/src/miller/parsing/mlr.bnf b/go/src/miller/parsing/mlr.bnf index 848fd180f..3caec6552 100644 --- a/go/src/miller/parsing/mlr.bnf +++ b/go/src/miller/parsing/mlr.bnf @@ -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; diff --git a/go/src/miller/parsing/parser/productionstable.go b/go/src/miller/parsing/parser/productionstable.go index 236c8ab62..fc1f0ca6d 100644 --- a/go/src/miller/parsing/parser/productionstable.go +++ b/go/src/miller/parsing/parser/productionstable.go @@ -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{