您将如何在以下任何可以处理Python/Haskell/CoffeScript样式缩进的分析器生成器(PEG.js,Citrus,Treetop)中编写解析表达式语法:
尚未存在的编程语言的示例:
square x =
x * x
Run Code Online (Sandbox Code Playgroud)
cube x =
x * square x
Run Code Online (Sandbox Code Playgroud)
fib n =
if n <= 1
0
else
fib(n - 2) + fib(n - 1) # some cheating allowed here with brackets
Run Code Online (Sandbox Code Playgroud)
更新: 不要尝试为上面的示例编写解释器.我只对缩进问题感兴趣.另一个例子可能是解析以下内容:
foo
bar = 1
baz = 2
tap
zap = 3
# should yield (ruby style hashmap):
# {:foo => { :bar => 1, :baz => 2}, :tap => { :zap => …
Run Code Online (Sandbox Code Playgroud)