1

fsyacc には、解析時に導入される演算子を処理する方法がありますか? LLVMチュートリアルの例として使用されるおもちゃの言語であるKaleidoscope用のパーサーを構築しようとしています。Kaleidoscope では、演算子を優先レベルとともに定義できます。例えば:

# Logical unary not.
def unary!(v)
  if v then
    0
  else
    1;

# Define > with the same precedence as <.
def binary> 10 (LHS RHS)
  RHS < LHS;

# Binary "logical or", (note that it does not "short circuit")
def binary| 5 (LHS RHS)
  if LHS then
    1
  else if RHS then
    1
  else
    0;

# Define = with slightly lower precedence than relationals.
def binary= 9 (LHS RHS)
  !(LHS < RHS | LHS > RHS);
4

1 に答える 1

2

fsyaccには、動的な優先順位を支援する魔法はありません(これは、ほとんどの解析ツールではまれです)が、ここで説明するのと同じ戦略です。

http://llvm.org/docs/tutorial/LangImpl2.html#parserbinops

必要なものだと思います(私は一瞥しただけです)。

于 2011-05-24T23:53:46.440 に答える