antlr / grammars-v4

Grammars written for ANTLR v4; expectation that the grammars are free of actions.
MIT License
10.24k stars 3.72k forks source link

[postgresql] Fix for #4308, #4315 -- ambiguity and plpgsql grammar. #4316

Closed kaby76 closed 1 week ago

kaby76 commented 1 week ago

This PR fixes #4308 and #4315. The issue was caused by adding in rules for PL/PGSQL into PostgreSQL. These rules were added to parse function bodies, but the changes also affected parsing of PostgreSQL. The problem is that the lexing rules overlap between the two languages. You cannot simply add two non-disjoint lexer rules together because you then have an enormous task in trying to clarify the PostgreSQL parser rules, least of which is the ambiguity. This is probably why there's a collection of tests that fail in the examples.errors/ directory.

The ambiguity no longer exists. trparse --ambig -i "SELECT 'trailing' AS first;" | trtree -a yields no ambiguity trees.

The plan is to re-add parsing of function bodies with a completely separate grammar for pl/pgsql later.

teverett commented 1 week ago

@kaby76 thanks