PEG для отступов в стиле Python

Как бы вы написали грамматику синтаксического анализа в любом из следующих генераторов синтаксического анализатора ( PEG.js , Citrus , Treetop ), который может обрабатывать отступы в стиле Python / Haskell / CoffeScript:

Примеры еще не существующего языка программирования:

square x =
    x * x

cube x =
    x * square x

fib n =
  if n <= 1
    0
  else
    fib(n - 2) + fib(n - 1) # some cheating allowed here with brackets

Обновление: Не пытайтесь написать интерпретатор для приведенных выше примеров. Меня интересует только проблема отступов. Другим примером может быть анализ следующего:

foo
  bar = 1
  baz = 2
tap
  zap = 3

# should yield (ruby style hashmap):
# {:foo => { :bar => 1, :baz => 2}, :tap => { :zap => 3 } }

32
задан Nash Bridges 18 June 2015 в 09:35
поделиться