Skip to content

Commit

Permalink
modify README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Mori Zyun committed Dec 10, 2012
1 parent d53a4b6 commit db7c8a1
Showing 1 changed file with 30 additions and 20 deletions.
50 changes: 30 additions & 20 deletions 13_interpreter_sample1.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
require 'find'

# 命令・抽象的な表現(AbstractExpression)
# Expression 共通するコードを持つ
class Expression
def |(other)
Or.new(self, other)
Expand All @@ -13,46 +14,40 @@ def &(other)
end

# 終端となる表現(構造木の葉) (TerminalExpression)
class FileName < Expression
def initialize(pattern)
@pattern = pattern
end

# All: すべてのファイルを返す
class All < Expression
def evaluate(dir)
results= []
Find.find(dir) do |p|
next unless File.file?(p)
name = File.basename(p)
results << p if File.fnmatch(@pattern, name)
results << p
end
results
end
end

# 終端となる表現(構造木の葉) (TerminalExpression)
class All < Expression
# FileName: 与えられたパターンとマッチするすべてのファイル名を返す
class FileName < Expression
def initialize(pattern)
@pattern = pattern
end

def evaluate(dir)
results= []
Find.find(dir) do |p|
next unless File.file?(p)
results << p
# File.basename => ファイルパスからファイル名だけを抽出
name = File.basename(p)
# File.fnmatch => ファイル名がパターンにマッチした場合のみtrueを返す
results << p if File.fnmatch(@pattern, name)
end
results
end
end

# 終端となる表現(構造木の葉) (TerminalExpression)
class Not < Expression
def initialize(expression)
@expression = expression
end

def evaluate(dir)
All.new.evaluate(dir) - @expression.evaluate(dir)
end
end

# 終端となる表現(構造木の葉) (TerminalExpression)
# Bigger: 指定したファイルサイズより大きいファイルを返す
class Bigger < Expression
def initialize(size)
@size = size
Expand All @@ -69,6 +64,7 @@ def evaluate(dir)
end

# 終端となる表現(構造木の葉) (TerminalExpression)
# Writable: 書込可能なファイルを返す
class Writable < Expression
def evaluate(dir)
results = []
Expand All @@ -81,6 +77,19 @@ def evaluate(dir)
end

# 終端以外の表現(構造木の節) NonterminalExpression
# Not: ファイル検索式の否定を表すクラス
class Not < Expression
def initialize(expression)
@expression = expression
end

def evaluate(dir)
All.new.evaluate(dir) - @expression.evaluate(dir)
end
end

# 終端以外の表現(構造木の節) NonterminalExpression
# Or: 2ファイル検索式をORで結合する
class Or < Expression
def initialize(expression1, expression2)
@expression1 = expression1
Expand All @@ -95,6 +104,7 @@ def evaluate(dir)
end

# 終端以外の表現(構造木の節) NonterminalExpression
# And: 2ファイル検索式をANDで結合する
class And < Expression
def initialize(expression1, expression2)
@expression1 = expression1
Expand Down

0 comments on commit db7c8a1

Please sign in to comment.