Генератор парсера Jison, как отличить вызовы функций guish от свойства / переменной? - PullRequest
0 голосов
/ 15 марта 2020

Я сейчас работаю над компилятором vba -> js, и я застрял с проблемой вызовов функций. В vba вы можете просто вызывать функцию по ее идентификатору следующим образом:

Foo
Object.Method
Object1.Method1 Object1.Prop, Object2.Method2 // same as Object1.Method1(Object1.Prop1, Object2.Method2())

На уровне грамматики вы не можете различить guish между вызовом функции в примере и простым доступом к проп. Потому что вы можете вызывать функцию следующим образом:

Foo Object.Prop // same as Foo(Object.Prop)
Foo Object.Method // same as Foo(Object.Method())

Та же проблема только с идентификатором:

Function Bar
  Bar = 42
End Function

Dim Baz As Integer
Baz = 3

Foo Bar // same as Foo(Bar())
Foo Baz // same as Foo(Baz)

У меня есть реализация области действия в моем компиляторе. Так что я думаю, что единственный способ - это проверить, отклонена ли переменная в области видимости, а не в функции, так что относиться к ней как к идентификатору / подпорке? Как я могу реализовать механизм для различения guish доступа от вызова?

...