Remove useless associativity/precedence from parsers

From: Akim Demaille <akim(at)lrde(dot)epita(dot)fr>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Remove useless associativity/precedence from parsers
Date: 2019-05-19 12:47:32
Message-ID: 3A125F91-5810-4E5A-93C6-178A7B34DB3D@lrde.epita.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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(dot)demaille(at)gmail(dot)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(dot)demaille(at)gmail(dot)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.

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Greg Stark 2019-05-19 14:03:23 Re: Create TOAST table only if AM needs
Previous Message Dean Rasheed 2019-05-19 09:49:03 Re: Multivariate MCV stats can leak data to unprivileged users