
程式的意義
|
61
describe "Array#<<" do
it "correctly resizes the Array" do
a = []
a.size.should == 0
a << :foo
a.size.should == 1
a << :bar << :baz
a.size.should == 3
a = [1, 2, 3]
a.shift
a.shift
a.shift
a << :foo
a.should == [:foo]
end
end
實作解析器
我們在本章始終自行手寫 SIMPLE 程式的抽象語法樹(手寫像是
Assign.new(:x, Add.
new(Vari able.new(:x), Number.new(1)))
之類的 Ruby 運算式),而非從像是
'x = x + 1'
的原始 SIMPLE 原始碼開始,並且使用解析器自動將它轉換成語法樹。
從無到有的實作 SIMPLE 解析器將涉及許多細節,而且不只會將我們帶離形式語意的
討論,更會帶離很遠。拆解、剖析沒有價值的玩具程式語言雖然有趣,而且由於存在著
很多的解析工具和程式庫,因此若要根據其他人的努力來構建解析器也不會太過困難,
這裡便是如何完成的簡要概述。
Treetop(
http://treetop.rubyforge.org/
)就是可以用在 Ruby 的最佳解析工具之一,這是
一種特定領域語言,它允許自動產生解析器,並以此作為描述語法的方式。Treetop 語
言語法的描述撰寫成 ...