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
associativityis declared (e.g., with %left) although the associativity is useless, only the precedence matters. I have
notchanged 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.demaille@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
aredifferent (but, of course, both parsers are equivalent).
commit 5322f7303a1a9dfa7cd959d68caeced847ae0466
Author: Akim Demaille <akim.demaille@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.