bracket_notation 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +24 -0
- data/COPYING +674 -0
- data/Manifest +23 -0
- data/README.rdoc +11 -0
- data/Rakefile +42 -0
- data/bracket_notation.gemspec +33 -0
- data/init.rb +29 -0
- data/lib/bracket_notation.rb +34 -0
- data/lib/bracket_notation/evaluator.rb +99 -0
- data/lib/bracket_notation/expressions.rb +31 -0
- data/lib/bracket_notation/expressions/expression.rb +49 -0
- data/lib/bracket_notation/expressions/identifier.rb +62 -0
- data/lib/bracket_notation/expressions/terminal.rb +34 -0
- data/lib/bracket_notation/parser.rb +99 -0
- data/lib/bracket_notation/scanner.rb +129 -0
- data/lib/bracket_notation/token.rb +79 -0
- data/lib/bracket_notation/version.rb +40 -0
- data/test/functional/evaluator_test.rb +48 -0
- data/test/functional/parser_test.rb +79 -0
- data/test/functional/scanner_test.rb +48 -0
- data/test/integration/parsing_test.rb +50 -0
- data/test/test_helper.rb +32 -0
- data/test/unit/expression_test.rb +72 -0
- data/test/unit/token_test.rb +117 -0
- metadata +129 -0
data/Manifest
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
CHANGELOG
|
2
|
+
COPYING
|
3
|
+
README.rdoc
|
4
|
+
Rakefile
|
5
|
+
init.rb
|
6
|
+
lib/bracket_notation.rb
|
7
|
+
lib/bracket_notation/evaluator.rb
|
8
|
+
lib/bracket_notation/expressions.rb
|
9
|
+
lib/bracket_notation/expressions/expression.rb
|
10
|
+
lib/bracket_notation/expressions/identifier.rb
|
11
|
+
lib/bracket_notation/expressions/terminal.rb
|
12
|
+
lib/bracket_notation/parser.rb
|
13
|
+
lib/bracket_notation/scanner.rb
|
14
|
+
lib/bracket_notation/token.rb
|
15
|
+
lib/bracket_notation/version.rb
|
16
|
+
test/functional/evaluator_test.rb
|
17
|
+
test/functional/parser_test.rb
|
18
|
+
test/functional/scanner_test.rb
|
19
|
+
test/integration/parsing_test.rb
|
20
|
+
test/test_helper.rb
|
21
|
+
test/unit/expression_test.rb
|
22
|
+
test/unit/token_test.rb
|
23
|
+
Manifest
|
data/README.rdoc
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
BracketNotation is a parser for generating syntax trees from sentences
|
2
|
+
annotated with the kind of bracket notation that is commonly used by
|
3
|
+
linguists. The result is a tree structure with nodes that describe the phrases
|
4
|
+
and constituents of the sentence.
|
5
|
+
|
6
|
+
BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
7
|
+
and small portions of his code have been incorporated in the parser.
|
8
|
+
|
9
|
+
Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
10
|
+
Copyright:: Copyright (c) 2010 Cody Brimhall
|
11
|
+
License:: Distributed under the terms of the GNU General Public License, v. 3
|
data/Rakefile
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
($:.unshift File.expand_path(File.join( File.dirname(__FILE__), 'lib' ))).uniq!
|
30
|
+
|
31
|
+
require 'echoe'
|
32
|
+
require 'bracket_notation/version'
|
33
|
+
|
34
|
+
Echoe.new('bracket_notation', BracketNotation::Version) do |p|
|
35
|
+
p.description = "Generates a representation of a syntax tree using a string of bracket notation."
|
36
|
+
p.summary = "Provides a parser for strings that have been marked up with the bracket notation commonly used by syntacticians. The parser generates an abstract tree representation of the syntax of the string."
|
37
|
+
p.url = "http://github.com/zbrimhall/bracket_notation"
|
38
|
+
p.author = "Cody Brimhall"
|
39
|
+
p.email = "zbrimhall@gmail.com"
|
40
|
+
p.ignore_pattern = %w(tmp/* script/* *.bbprojectd/*)
|
41
|
+
p.development_dependencies = ['shoulda >=2.11.3']
|
42
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{bracket_notation}
|
5
|
+
s.version = "1.0.3"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Cody Brimhall"]
|
9
|
+
s.date = %q{2011-01-08}
|
10
|
+
s.description = %q{Generates a representation of a syntax tree using a string of bracket notation.}
|
11
|
+
s.email = %q{zbrimhall@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "COPYING", "README.rdoc", "lib/bracket_notation.rb", "lib/bracket_notation/evaluator.rb", "lib/bracket_notation/expressions.rb", "lib/bracket_notation/expressions/expression.rb", "lib/bracket_notation/expressions/identifier.rb", "lib/bracket_notation/expressions/terminal.rb", "lib/bracket_notation/parser.rb", "lib/bracket_notation/scanner.rb", "lib/bracket_notation/token.rb", "lib/bracket_notation/version.rb"]
|
13
|
+
s.files = ["CHANGELOG", "COPYING", "README.rdoc", "Rakefile", "init.rb", "lib/bracket_notation.rb", "lib/bracket_notation/evaluator.rb", "lib/bracket_notation/expressions.rb", "lib/bracket_notation/expressions/expression.rb", "lib/bracket_notation/expressions/identifier.rb", "lib/bracket_notation/expressions/terminal.rb", "lib/bracket_notation/parser.rb", "lib/bracket_notation/scanner.rb", "lib/bracket_notation/token.rb", "lib/bracket_notation/version.rb", "test/functional/evaluator_test.rb", "test/functional/parser_test.rb", "test/functional/scanner_test.rb", "test/integration/parsing_test.rb", "test/test_helper.rb", "test/unit/expression_test.rb", "test/unit/token_test.rb", "Manifest", "bracket_notation.gemspec"]
|
14
|
+
s.homepage = %q{http://github.com/zbrimhall/bracket_notation}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Bracket_notation", "--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{bracket_notation}
|
18
|
+
s.rubygems_version = %q{1.4.2}
|
19
|
+
s.summary = %q{Provides a parser for strings that have been marked up with the bracket notation commonly used by syntacticians. The parser generates an abstract tree representation of the syntax of the string.}
|
20
|
+
s.test_files = ["test/functional/evaluator_test.rb", "test/functional/parser_test.rb", "test/functional/scanner_test.rb", "test/integration/parsing_test.rb", "test/test_helper.rb", "test/unit/expression_test.rb", "test/unit/token_test.rb"]
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
|
+
s.add_development_dependency(%q<shoulda>, [">= 2.11.3"])
|
27
|
+
else
|
28
|
+
s.add_dependency(%q<shoulda>, [">= 2.11.3"])
|
29
|
+
end
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<shoulda>, [">= 2.11.3"])
|
32
|
+
end
|
33
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
require 'lib/bracket_notation'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
require 'bracket_notation/evaluator'
|
30
|
+
require 'bracket_notation/expressions'
|
31
|
+
require 'bracket_notation/parser'
|
32
|
+
require 'bracket_notation/scanner'
|
33
|
+
require 'bracket_notation/token'
|
34
|
+
require 'bracket_notation/version'
|
@@ -0,0 +1,99 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
module BracketNotation # :nodoc:
|
30
|
+
# This class takes a list of Token instances and evaluates them. The result is
|
31
|
+
# an abstract tree representation of the syntax of the original string fed to
|
32
|
+
# the parser.
|
33
|
+
class Evaluator
|
34
|
+
attr_reader :input
|
35
|
+
|
36
|
+
# This class is an Exception subclass that reports errors in the evaluation
|
37
|
+
# process.
|
38
|
+
class EvaluationError < SyntaxError; end
|
39
|
+
|
40
|
+
# Saves the token list for evaluation.
|
41
|
+
def initialize(input)
|
42
|
+
@input = input
|
43
|
+
@token_index = -1
|
44
|
+
@root = nil
|
45
|
+
end
|
46
|
+
|
47
|
+
# Evaluates a bracketed phrase and returns the Evaluation instance that
|
48
|
+
# represents the phrase.
|
49
|
+
def evaluate
|
50
|
+
return @root unless @root.nil?
|
51
|
+
|
52
|
+
token = next_token
|
53
|
+
unexpected_token_error if token.type != Token::LBRACKET
|
54
|
+
@root = evaluate_phrase
|
55
|
+
|
56
|
+
unexpected_token_error if next_token.type != Token::EOL
|
57
|
+
|
58
|
+
return @root
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
# Evaluates a phrase expression.
|
64
|
+
def evaluate_phrase
|
65
|
+
token = next_token
|
66
|
+
unexpected_token_error if token.type != Token::NAME
|
67
|
+
|
68
|
+
identifier = Identifier.new(token.value)
|
69
|
+
|
70
|
+
while((token = next_token).type != Token::RBRACKET)
|
71
|
+
expression = case token.type
|
72
|
+
when Token::NAME: Terminal.new(token.value)
|
73
|
+
when Token::LBRACKET: evaluate_phrase
|
74
|
+
else unexpected_token_error
|
75
|
+
end
|
76
|
+
|
77
|
+
identifier.add_child(expression)
|
78
|
+
end
|
79
|
+
|
80
|
+
return identifier
|
81
|
+
end
|
82
|
+
|
83
|
+
# Returns the token currently being evaluated.
|
84
|
+
def current_token
|
85
|
+
return @input[@token_index]
|
86
|
+
end
|
87
|
+
|
88
|
+
# Advances the token index and returns the new current token.
|
89
|
+
def next_token
|
90
|
+
@token_index += 1
|
91
|
+
return current_token
|
92
|
+
end
|
93
|
+
|
94
|
+
# Raises an unexpected token error.
|
95
|
+
def unexpected_token_error
|
96
|
+
raise EvaluationError, "Unexpected token: #{current_token.inspect}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
require 'bracket_notation/expressions/expression'
|
30
|
+
require 'bracket_notation/expressions/identifier'
|
31
|
+
require 'bracket_notation/expressions/terminal'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
module BracketNotation # :nodoc:
|
30
|
+
# This class represents the result of evaluating a token. It is an abstract
|
31
|
+
# class that should have a subclass for every possible kind of expression.
|
32
|
+
class Expression
|
33
|
+
attr_accessor :value, :depth, :parent
|
34
|
+
|
35
|
+
# Saves the token value and optional tree depth.
|
36
|
+
def initialize(value, depth = 0)
|
37
|
+
@value = value
|
38
|
+
@depth = depth
|
39
|
+
@parent = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# Prints a visual representation of the syntax tree.
|
43
|
+
def pretty_print
|
44
|
+
out = ""
|
45
|
+
@depth.times {out << "--"}
|
46
|
+
out << " #{@value}\n"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
module BracketNotation # :nodoc:
|
30
|
+
# This class represents an identifier expression. Identifers are expressions
|
31
|
+
# that can have children -- branch nodes, in other words.
|
32
|
+
class Identifier < Expression
|
33
|
+
attr_accessor :children, :depth
|
34
|
+
|
35
|
+
# Saves the identifier value and optional tree depth.
|
36
|
+
def initialize(value, depth = 0)
|
37
|
+
super
|
38
|
+
@children = []
|
39
|
+
end
|
40
|
+
|
41
|
+
# Adds the given expression to the children array and updates the new
|
42
|
+
# child's parent and depth attributes.
|
43
|
+
def add_child(expression)
|
44
|
+
expression.parent = self
|
45
|
+
expression.depth = @depth + 1
|
46
|
+
@children << expression
|
47
|
+
end
|
48
|
+
|
49
|
+
# Sets the new depth, and the new depth of all children.
|
50
|
+
def depth=(rvalue)
|
51
|
+
@depth = rvalue
|
52
|
+
children.each {|child| child.depth = rvalue + 1}
|
53
|
+
end
|
54
|
+
|
55
|
+
# Prints a visual representation of the syntax tree.
|
56
|
+
def pretty_print
|
57
|
+
out = super
|
58
|
+
@children.each {|child| out << child.pretty_print}
|
59
|
+
out
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#--
|
2
|
+
# This file is part of BracketNotation.
|
3
|
+
#
|
4
|
+
# BracketNotation is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# BracketNotation is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with BracketNotation. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#++
|
17
|
+
# BracketNotation is a parser for generating syntax trees from sentences
|
18
|
+
# annotated with the kind of bracket notation that is commonly used by
|
19
|
+
# linguists. The result is a tree structure with nodes that describe the phrases
|
20
|
+
# and constituents of the sentence.
|
21
|
+
#
|
22
|
+
# BracketNotation was inspired by Yoichiro Hasebe's RSyntaxTree[http://yohasebe.com/rsyntaxtree/],
|
23
|
+
# and small portions of his code have been incorporated in the parser.
|
24
|
+
#
|
25
|
+
# Author:: Cody Brimhall (mailto:brimhall@somuchwit.com)
|
26
|
+
# Copyright:: Copyright (c) 2010 Cody Brimhall
|
27
|
+
# License:: Distributed under the terms of the GNU General Public License, v. 3
|
28
|
+
|
29
|
+
module BracketNotation # :nodoc:
|
30
|
+
# This class represents a terminal expression. Terminals are expressions that
|
31
|
+
# do not have children -- leaf nodes, in other words.
|
32
|
+
class Terminal < Expression
|
33
|
+
end
|
34
|
+
end
|