Path: utzoo!attcan!uunet!seismo!sundc!pitstop!sun!amdcad!ames!ncar!umigw!steve From: steve@umigw.MIAMI.EDU (steve emmerson) Newsgroups: comp.lang.c Subject: Re: Pcc bites it (was Re: programming puzzle (silly)) Summary: we're both right! Message-ID: <223@umigw.MIAMI.EDU> Date: 20 Mar 89 14:47:42 GMT References: <2957@goofy.megatest.UUCP> Reply-To: steve@umigw.miami.edu (steve emmerson) Distribution: na Organization: University of Miami Lines: 56 (This discussion reminds me of the skit on Saturday Night Live where one side argues that a certain product is a dessert topping and the other argues that it's a floor wax :-). I believe the string "n&&m*=n--" is legal under the grammar rules for *K&R-1st edition C*. Under pANS (or K&R-2nd edition C) however, I believe it's illegal. (Since in his original posting Tim Olson didn't say which grammar he was assuming, it turns out we're both right!). I believe a given string is legal if it can be *generated* by the production rules for the grammar. Arguments as to whether or not a particular type of parser can correctly interpret a given string are, in my opinion, irrelevant. The string "n&&m*=n--" can be generated from the production rules for K&R-I C found in Appendix A. Here's the parse tree: expression | --------------------------------------- | | | expression binop expression | | | | | ------------------------------- | | | | | primary && expression asgnop expression | | | | | | | ------------- | | | | | n identifier *= expression unop | | | m identifier -- | n It's up to the parser to (re)discover this parse tree upon encountering the string "n&&m*=n--". Some can; some can't. Since it can be *generated* from the K&R-I grammar, however, it's legal. Admittedly, the Appendix A production rules are not very formal, still, a very good argument can be made for their being the ultimate arbiter of K&R-I C. (They are certainly at least as valid as anything else ;-). Arguments that the string is invalid Appendix A K&R-I C must show that 1) the above parse tree is invalid; or 2) the above parse tree is non-unique. This would require the use of disambiguating precedence rules in order to parse it and a consequent conclusion that it's illegal. In pANS C (and K&R-II C), on the other hand, the string "n&&m*=n--" cannot be generated---much less parsed. Interesting, no? -- Steve Emmerson Inet: steve@umigw.miami.edu [128.116.10.1] SPAN: miami::emmerson (host 3074::) emmerson%miami.span@star.stanford.edu UUCP: ...!ncar!umigw!steve emmerson%miami.span@vlsi.jpl.nasa.gov "Computers are like God in the Old Testament: lots of rules and no mercy"