fsyacc: позволяет определять операторы на языке - PullRequest
1 голос
/ 25 мая 2011

Есть ли у fsyacc способ работать с операторами, которые вводятся во время разбора?Я пытаюсь создать парсер для Kaleidoscope, который является игрушечным языком и используется в качестве примера для учебника LLVM .Калейдоскоп позволяет определять операторов вместе с уровнями приоритета.Например:

# 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);

1 Ответ

2 голосов
/ 25 мая 2011

В fsyacc нет магии, которая бы помогала с динамическим приоритетом (это редко встречается в большинстве инструментов синтаксического анализа), но та же стратегия описана здесь

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

это то, что тебе нужно, я думаю (я только взглянул).

...