lex と yacc を使用して、Lua に似た言語用のパーサーを作成しようとしています。強制的なステートメントターミネータ(セミコロン)のない言語であり、この機能により、関数呼び出しがステートメントか式かを判断できませんでした。
たとえば、次の関数:
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 コードを書くことができません。
この機能を実装するにはどうすればよいですか? 強制ステートメントターミネータを導入することが唯一の方法ですか?
どうもありがとうございました。