[grammarians] ambiguity with method call?
yawl.20481481@bloglines.com
yawl.20481481 at bloglines.com
Thu Dec 1 12:19:18 EST 2005
I have solved a similar issue(see http://seclib.blogspot.com/2005/11/more-on-leftshift-and-heredoc.html
) and the same rules apply in this case.
For "foo[1]", first the lexer
need to lookup symbol table to see if foo is a local varible. If
not found,
assume foo is a function.
After we know foo is function, then space is
important. If there is a space between foo and [1]("foo [1]"), then foo
is a function call and [1] is the parameter(same as "foo([1])"). If there
is no space("foo[1]"), then it is treated as "(foo)[1]".
Since the parser
can not see space, the burden is on the lexer. In other words, it should return
different token type for '[' in different context. For example: LBRACK_IN_COMMAND
and LBRACK.
Xue Yong Zhi
http://seclib.blogspot.com
--- Terence Parr
<parrt at cs.usfca.edu wrote:
> 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?
More information about the Rubygrammar-grammarians
mailing list