Hi all,

Many of the grammars could be clarified.  For instance there's a number of 
useless associativity and/or precedence declarations.  Maybe the point is to 
leave some form of a documentation, but actually, since it's not used at all by 
the tool, that documentation is not checked.

In the following two proposed patches, I remove directives that are completely 
useless.  In other places, some associativity is declared (e.g., with %left) 
although the associativity is useless, only the precedence matters.  I have not 
changed this, because I don't know what is the version of Bison that is 
required.  Given that it's a maintainer-side tool, I would suggest targeting 
recent versions of Bison, but opinions might differ here.

Cheers!

commit 75e597aa239d8ebc332d3a29630ecad0133d3d6f
Author: Akim Demaille <akim.demai...@gmail.com>
Date:   Sun May 19 14:24:33 2019 +0200

    json_path: remove useless precedence directives
    
    These directives are useless: the generated parser is exactly the
    same (except for line number changes).

diff --git a/src/backend/utils/adt/jsonpath_gram.y 
b/src/backend/utils/adt/jsonpath_gram.y
index 22c2089f78..82b6529414 100644
--- a/src/backend/utils/adt/jsonpath_gram.y
+++ b/src/backend/utils/adt/jsonpath_gram.y
@@ -115,11 +115,9 @@ static JsonPathParseItem 
*makeItemLikeRegex(JsonPathParseItem *expr,
 
 %left  OR_P
 %left  AND_P
-%right NOT_P
 %left  '+' '-'
 %left  '*' '/' '%'
 %left  UMINUS
-%nonassoc '(' ')'
 
 /* Grammar follows */
 %%



This second patch could be made simpler: just remove the %token declarations I 
provided, but then the generated files are different (but, of course, both 
parsers are equivalent).

commit 5322f7303a1a9dfa7cd959d68caeced847ae0466
Author: Akim Demaille <akim.demai...@gmail.com>
Date:   Sun May 19 14:32:15 2019 +0200

    parser: remove useless associativity/precedence
    
    Use %token instead to guarantee that the token numbers are the same
    before and after this patch.  As a consequence, the generated files
    are equal.

diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 3dc0e8a4fb..3d4c552cfa 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -766,10 +766,10 @@ static Node *makeRecursiveViewSelect(char *relname, List 
*aliases, Node *query);
 %left          AT                              /* sets precedence for AT TIME 
ZONE */
 %left          COLLATE
 %right         UMINUS
-%left          '[' ']'
+%token         '[' ']'
 %left          '(' ')'
 %left          TYPECAST
-%left          '.'
+%token         '.'
 /*
  * These might seem to be low-precedence, but actually they are not part
  * of the arithmetic hierarchy at all in their use as JOIN operators.





Reply via email to