Path: csiph.com!weretis.net!feeder6.news.weretis.net!news.misty.com!news.iecc.com!.POSTED.news.iecc.com!nerds-end From: Fernando Newsgroups: comp.compilers Subject: Re: Why are ambiguous grammars usually a bad idea? Why are languages usually defined and implemented with ambiguous grammars? Date: Mon, 27 Dec 2021 03:56:35 -0800 (PST) Organization: Compilers Central Lines: 24 Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <21-12-006@comp.compilers> References: <21-12-003@comp.compilers> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Injection-Info: gal.iecc.com; posting-host="news.iecc.com:2001:470:1f07:1126:0:676f:7373:6970"; logging-data="3282"; mail-complaints-to="abuse@iecc.com" Keywords: parse, design Posted-Date: 27 Dec 2021 21:27:47 EST X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com In-Reply-To: <21-12-003@comp.compilers> Xref: csiph.com comp.compilers:2768 Hi Roger, One problem with ambiguous grammars is that ambiguities might confuse the semantics of the programming language. One example is with the associativity and precedence of operators. Concerning associativity, the ambiguous grammar below does not specify if subtraction is left or right associative: E ::= E - E | num And, there is this classic example from C-like languages involving conditional statements: ::= if then | if then else What would be the meaning of a statement like the one below? Depending on how you fix the ambiguity, it's possible to make the else refer to the innermost or the outermost conditional. if (a > b) then if (c > d) then print(1) else print(2) Regards, Fernando