On Nov 29, 2005, at 11:47 PM, Ryan Davis wrote: > > On Nov 29, 2005, at 12:59 PM, Terence Parr wrote: > >> Howdy, >> >> What does >> >> foo [1] > > sudo gem install ParseTree (!!) > > % echo "foo [1]" | parse_tree_show -f > ... > [:fcall, :foo, [:array, [:array, [:lit, 1]]]] > > without any other context to go on, it is assumed it is an fcall, > in other contexts it could be an lvar, dvar, or a regular call. > > You should also do a gem unpack ParseTree and look through the unit > tests. That might answer quite a few of your questions as well.
Yep. Thanks, Ryan. Here's the thing. The impl does not specify the language definition; i've seen mistakes in C compilers. My point is that the language rules as described everywhere I look could easily be seen to interpret foo[1] in two ways: (foo)[1] and foo([1]) even when we know foo is a function call. how could it not? There is no syntax to distinguish. Remember that structure imparts meaning. Just because his implementation picks one doesn't mean there isn't a real ambiguity here. For example, C++ clearly identifies the ambiguity between decl and expr statements and says in the book that if some input can be either, choose decl (it's still a bad thing, but it's known and specified). Languages do have ambiguities such as the if-then-else bugaboo, but it needs to be clearly outlined rather than just biting somebody. More importantly, computer languages should be defined as deterministically/unambiguously as possible. It's already bad enough in ruby that I have to look backwards to see how it was used first lexically (particularly when there are two interpretations possible given foo=1 and def foo). Adding in this unspecified preference to resolve the ambiguity is pretty rough on a guy. It's a bug in hiding waiting to bite you 2 years hence when that code execs and gives you a runtime type exception. All that said, the point of this exercise is probably to get a real spec driven from a real grammatical description. Am I the first person to run across this ambiguity before? Ter _______________________________________________ Rubygrammar-grammarians mailing list [email protected] http://rubyforge.org/mailman/listinfo/rubygrammar-grammarians
