Я пытаюсь написать парсер для Lua-подобного языка, используя lex и yacc.Это язык без принудительного завершения оператора (точка с запятой), и эта функция не позволила мне определить, является ли вызов функции оператором или выражением.
Например, следующая функция:
function foo()
return { x = 5 }
end
вернет таблицу.Вот некоторые примеры использования:
foo() -- this is a statement
t = foo() -- foo is an expression
a = foo().x -- foo() is a prefix-expression
print(foo()) -- foo() is an expression
Я не могу написать бесконфликтный код YACC, потому что простой вызов функции может быть выражением, префиксным выражением или оператором.
Как я могу реализоватьэта особенность?Является ли введение принудительных операторов-терминаторов единственным способом?
Большое спасибо.