zenlish 0.2.05 → 0.2.07

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.
Files changed (173) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +228 -0
  3. data/CHANGELOG.md +19 -0
  4. data/Gemfile +5 -3
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +5 -3
  7. data/lib/zenlish/feature/boolean_domain.rb +6 -4
  8. data/lib/zenlish/feature/boolean_value.rb +3 -2
  9. data/lib/zenlish/feature/enumeration_domain.rb +5 -2
  10. data/lib/zenlish/feature/feature.rb +9 -7
  11. data/lib/zenlish/feature/feature_def.rb +9 -6
  12. data/lib/zenlish/feature/feature_domain.rb +4 -2
  13. data/lib/zenlish/feature/feature_struct.rb +3 -1
  14. data/lib/zenlish/feature/feature_struct_def.rb +5 -3
  15. data/lib/zenlish/feature/feature_struct_def_bearer.rb +6 -4
  16. data/lib/zenlish/feature/feature_value.rb +4 -2
  17. data/lib/zenlish/feature/identifier_domain.rb +5 -3
  18. data/lib/zenlish/feature/identifier_value.rb +3 -2
  19. data/lib/zenlish/feature/symbol_value.rb +3 -1
  20. data/lib/zenlish/inflect/atomic_o_expression.rb +2 -1
  21. data/lib/zenlish/inflect/composite_o_expression.rb +3 -1
  22. data/lib/zenlish/inflect/concatenation.rb +3 -2
  23. data/lib/zenlish/inflect/equals_literal.rb +3 -1
  24. data/lib/zenlish/inflect/feature_heading.rb +2 -5
  25. data/lib/zenlish/inflect/formal_argument.rb +3 -1
  26. data/lib/zenlish/inflect/function_call.rb +4 -1
  27. data/lib/zenlish/inflect/heading.rb +2 -0
  28. data/lib/zenlish/inflect/inflection_rule.rb +2 -0
  29. data/lib/zenlish/inflect/inflection_table.rb +6 -4
  30. data/lib/zenlish/inflect/inflection_table_builder.rb +21 -18
  31. data/lib/zenlish/inflect/input_asis.rb +3 -0
  32. data/lib/zenlish/inflect/input_expression.rb +4 -2
  33. data/lib/zenlish/inflect/literal_asis.rb +4 -1
  34. data/lib/zenlish/inflect/matches_pattern.rb +2 -0
  35. data/lib/zenlish/inflect/membership.rb +2 -0
  36. data/lib/zenlish/inflect/method_heading.rb +3 -6
  37. data/lib/zenlish/inflect/not_equals_literal.rb +2 -0
  38. data/lib/zenlish/inflect/nullary_input_expression.rb +3 -1
  39. data/lib/zenlish/inflect/output_expression.rb +6 -0
  40. data/lib/zenlish/inflect/substitution.rb +3 -1
  41. data/lib/zenlish/inflect/unary_input_expression.rb +4 -1
  42. data/lib/zenlish/inflect/unconditionally_true.rb +4 -2
  43. data/lib/zenlish/lang/dictionary.rb +19 -16
  44. data/lib/zenlish/lang/lemmatizer.rb +40 -0
  45. data/lib/zenlish/lang/zenlish_grammar.rb +6 -4
  46. data/lib/zenlish/lex/empty_lexicon_factory.rb +3 -2
  47. data/lib/zenlish/lex/lexeme.rb +6 -4
  48. data/lib/zenlish/lex/lexical_entry.rb +6 -4
  49. data/lib/zenlish/lex/lexicon.rb +4 -3
  50. data/lib/zenlish/lex/literal.rb +3 -1
  51. data/lib/zenlish/lexer/lexer.rb +144 -0
  52. data/lib/zenlish/trie/base_trie_node.rb +27 -0
  53. data/lib/zenlish/trie/trie.rb +132 -0
  54. data/lib/zenlish/trie/trie_node.rb +21 -0
  55. data/lib/zenlish/trie/trie_root.rb +10 -0
  56. data/lib/zenlish/version.rb +3 -1
  57. data/lib/zenlish/wclasses/adjective.rb +4 -2
  58. data/lib/zenlish/wclasses/adverb.rb +3 -1
  59. data/lib/zenlish/wclasses/adverb_maybe.rb +3 -1
  60. data/lib/zenlish/wclasses/adverb_not.rb +2 -0
  61. data/lib/zenlish/wclasses/all_word_classes.rb +3 -1
  62. data/lib/zenlish/wclasses/article.rb +2 -0
  63. data/lib/zenlish/wclasses/auxiliary.rb +2 -0
  64. data/lib/zenlish/wclasses/auxiliary_be.rb +7 -6
  65. data/lib/zenlish/wclasses/auxiliary_do.rb +6 -5
  66. data/lib/zenlish/wclasses/cardinal.rb +3 -1
  67. data/lib/zenlish/wclasses/common_noun.rb +2 -0
  68. data/lib/zenlish/wclasses/comparative_particle.rb +5 -3
  69. data/lib/zenlish/wclasses/conjunction.rb +2 -0
  70. data/lib/zenlish/wclasses/conjunctive_pronoun.rb +2 -0
  71. data/lib/zenlish/wclasses/coordinator.rb +4 -2
  72. data/lib/zenlish/wclasses/definite_article.rb +2 -0
  73. data/lib/zenlish/wclasses/degree_adverb.rb +2 -0
  74. data/lib/zenlish/wclasses/demonstrative_determiner.rb +6 -4
  75. data/lib/zenlish/wclasses/demonstrative_pronoun.rb +2 -0
  76. data/lib/zenlish/wclasses/determiner.rb +3 -1
  77. data/lib/zenlish/wclasses/distributive_determiner.rb +2 -0
  78. data/lib/zenlish/wclasses/existential_there.rb +2 -0
  79. data/lib/zenlish/wclasses/fronting_quantifier.rb +3 -1
  80. data/lib/zenlish/wclasses/indefinite_article.rb +2 -0
  81. data/lib/zenlish/wclasses/indefinite_pronoun.rb +3 -1
  82. data/lib/zenlish/wclasses/irregular_linking_verb.rb +3 -1
  83. data/lib/zenlish/wclasses/irregular_verb.rb +13 -15
  84. data/lib/zenlish/wclasses/irregular_verb_be.rb +8 -7
  85. data/lib/zenlish/wclasses/irregular_verb_can.rb +8 -7
  86. data/lib/zenlish/wclasses/irregular_verb_do.rb +7 -6
  87. data/lib/zenlish/wclasses/irregular_verb_extension.rb +8 -7
  88. data/lib/zenlish/wclasses/irregular_verb_have.rb +12 -11
  89. data/lib/zenlish/wclasses/irregular_verb_know.rb +3 -1
  90. data/lib/zenlish/wclasses/irregular_verb_say.rb +3 -1
  91. data/lib/zenlish/wclasses/irregular_verb_think.rb +3 -1
  92. data/lib/zenlish/wclasses/lexical_verb.rb +3 -4
  93. data/lib/zenlish/wclasses/linking_adverb.rb +2 -0
  94. data/lib/zenlish/wclasses/modal_verb_can.rb +7 -5
  95. data/lib/zenlish/wclasses/noun.rb +4 -2
  96. data/lib/zenlish/wclasses/numeral.rb +2 -0
  97. data/lib/zenlish/wclasses/personal_pronoun.rb +8 -6
  98. data/lib/zenlish/wclasses/possessive_determiner.rb +13 -12
  99. data/lib/zenlish/wclasses/preposition.rb +3 -1
  100. data/lib/zenlish/wclasses/preposition_of.rb +2 -0
  101. data/lib/zenlish/wclasses/preposition_than.rb +2 -0
  102. data/lib/zenlish/wclasses/pronoun.rb +3 -1
  103. data/lib/zenlish/wclasses/proper_noun.rb +10 -8
  104. data/lib/zenlish/wclasses/quantifier.rb +3 -1
  105. data/lib/zenlish/wclasses/regular_verb.rb +9 -9
  106. data/lib/zenlish/wclasses/regular_verb_want.rb +4 -2
  107. data/lib/zenlish/wclasses/relative_pronoun.rb +4 -2
  108. data/lib/zenlish/wclasses/subordinating_conjunction.rb +7 -5
  109. data/lib/zenlish/wclasses/verb.rb +5 -3
  110. data/lib/zenlish/wclasses/word_class.rb +7 -5
  111. data/lib/zenlish.rb +3 -3
  112. data/spec/spec_helper.rb +3 -1
  113. data/spec/zenlish/feature/boolean_domain_spec.rb +16 -16
  114. data/spec/zenlish/feature/boolean_value_spec.rb +7 -6
  115. data/spec/zenlish/feature/enumeration_domain_spec.rb +21 -21
  116. data/spec/zenlish/feature/feature_def_spec.rb +15 -14
  117. data/spec/zenlish/feature/feature_spec.rb +17 -17
  118. data/spec/zenlish/feature/feature_struct_def_bearer_spec.rb +23 -21
  119. data/spec/zenlish/feature/feature_struct_def_spec.rb +26 -25
  120. data/spec/zenlish/feature/identifier_domain_spec.rb +15 -15
  121. data/spec/zenlish/feature/identifier_value_spec.rb +10 -9
  122. data/spec/zenlish/feature/symbol_value_spec.rb +9 -8
  123. data/spec/zenlish/inflect/concatenation_spec.rb +14 -14
  124. data/spec/zenlish/inflect/equals_literal_spec.rb +17 -16
  125. data/spec/zenlish/inflect/feature_heading_spec.rb +22 -21
  126. data/spec/zenlish/inflect/formal_argument_spec.rb +7 -7
  127. data/spec/zenlish/inflect/function_call_spec.rb +11 -12
  128. data/spec/zenlish/inflect/inflection_rule_spec.rb +28 -24
  129. data/spec/zenlish/inflect/inflection_table_builder_spec.rb +62 -57
  130. data/spec/zenlish/inflect/inflection_table_spec.rb +49 -46
  131. data/spec/zenlish/inflect/input_asis_spec.rb +12 -15
  132. data/spec/zenlish/inflect/literal_asis_spec.rb +10 -10
  133. data/spec/zenlish/inflect/matches_pattern_spec.rb +16 -15
  134. data/spec/zenlish/inflect/membership_spec.rb +17 -16
  135. data/spec/zenlish/inflect/method_heading_spec.rb +15 -14
  136. data/spec/zenlish/inflect/not_equals_literal_spec.rb +17 -16
  137. data/spec/zenlish/inflect/substitution_spec.rb +10 -11
  138. data/spec/zenlish/inflect/unconditionally_true_spec.rb +8 -6
  139. data/spec/zenlish/lang/dictionary_spec.rb +28 -31
  140. data/spec/zenlish/lang/lemmatizer_spec.rb +43 -0
  141. data/spec/zenlish/lang/zenlish_grammar_spec.rb +5 -5
  142. data/spec/zenlish/lex/empty_lexicon_factory_spec.rb +8 -8
  143. data/spec/zenlish/lex/lexeme_spec.rb +27 -28
  144. data/spec/zenlish/lex/lexical_entry_spec.rb +15 -15
  145. data/spec/zenlish/lex/lexicon_spec.rb +52 -50
  146. data/spec/zenlish/lex/literal_spec.rb +8 -8
  147. data/spec/zenlish/lexer/lexer_spec.rb +52 -0
  148. data/spec/zenlish/parser/lesson1_spec.rb +81 -81
  149. data/spec/zenlish/parser/lesson2_spec.rb +133 -138
  150. data/spec/zenlish/parser/lesson3_spec.rb +186 -226
  151. data/spec/zenlish/parser/zparser_spec.rb +8 -7
  152. data/spec/zenlish/support/minimal_lexicon.rb +2 -0
  153. data/spec/zenlish/support/var2word.rb +16 -9
  154. data/spec/zenlish/trie/base_trie_node_spec.rb +33 -0
  155. data/spec/zenlish/trie/trie_spec.rb +108 -0
  156. data/spec/zenlish/wclasses/common_noun_spec.rb +15 -19
  157. data/spec/zenlish/wclasses/demonstrative_determiner_spec.rb +12 -12
  158. data/spec/zenlish/wclasses/irregular_verb_can_spec.rb +18 -18
  159. data/spec/zenlish/wclasses/irregular_verb_extension_spec.rb +10 -10
  160. data/spec/zenlish/wclasses/irregular_verb_spec.rb +28 -28
  161. data/spec/zenlish/wclasses/lexical_verb_spec.rb +9 -9
  162. data/spec/zenlish/wclasses/modal_verb_can_spec.rb +12 -12
  163. data/spec/zenlish/wclasses/noun_spec.rb +7 -7
  164. data/spec/zenlish/wclasses/personal_pronoun_spec.rb +20 -23
  165. data/spec/zenlish/wclasses/possessive_determiner_spec.rb +28 -31
  166. data/spec/zenlish/wclasses/preposition_spec.rb +5 -5
  167. data/spec/zenlish/wclasses/proper_noun_spec.rb +3 -3
  168. data/spec/zenlish/wclasses/regular_verb_spec.rb +30 -30
  169. data/spec/zenlish/wclasses/regular_verb_want_spec.rb +30 -0
  170. data/spec/zenlish/wclasses/verb_spec.rb +9 -9
  171. data/spec/zenlish_spec.rb +4 -2
  172. data/zenlish.gemspec +18 -14
  173. metadata +49 -16
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../lex/literal'
4
+
5
+ module Zenlish
6
+ module Lexer
7
+ class Lexer
8
+ # @return [StringScanner] Low-level scanner object.
9
+ attr_reader(:scanner)
10
+
11
+ # @return [Boolean] true, if lexer is currently busy to scan Zenlish.
12
+ attr_reader(:zenlish_mode)
13
+
14
+ # @return [Integer] Current line number (one-based)
15
+ attr_reader(:lineno)
16
+
17
+ # @return [Integer] Offset of start of current line within IO (one-based).
18
+ attr_reader(:line_start)
19
+
20
+ @@punct2name = {
21
+ ':' => 'Colon',
22
+ ',' => 'Comma',
23
+ '.' => 'Period',
24
+ '"' => 'Quote'
25
+ }.freeze
26
+
27
+ class ScanError < StandardError; end
28
+
29
+ # Constructor. Initialize a tokenizer for Skeem.
30
+ # @param source [String] Skeem text to tokenize.
31
+ def initialize(source)
32
+ @scanner = StringScanner.new('')
33
+ @zenlish_mode = true
34
+ reinitialize(source)
35
+ end
36
+
37
+ # @param source [String] Skeem text to tokenize.
38
+ def reinitialize(source)
39
+ @scanner.string = source
40
+ @lineno = 1
41
+ @line_start = 0
42
+ end
43
+
44
+ # @return [Array<Token>] | Returns a sequence of tokens
45
+ def tokens
46
+ tok_sequence = []
47
+ until @scanner.eos?
48
+ token = _next_token
49
+ tok_sequence << token unless token.nil?
50
+ end
51
+
52
+ return tok_sequence
53
+ end
54
+
55
+ private
56
+
57
+ def _next_token
58
+ skip_intertoken_spaces
59
+ if zenlish_mode
60
+ next_zenlish_token
61
+ else
62
+ next_json_token
63
+ end
64
+ end
65
+
66
+ def next_zenlish_token
67
+ curr_ch = scanner.peek(1)
68
+ return nil if curr_ch.nil? || curr_ch.empty?
69
+
70
+ token = nil
71
+
72
+ if ':,."'.include? curr_ch
73
+ # Delimiters, separators => single character token
74
+ token = build_token(@@punct2name[curr_ch], scanner.getch)
75
+ elsif (literal = scanner.scan(/[^\s:;,."]+/))
76
+ token = build_token('WORD', literal)
77
+ else # Unknown token
78
+ erroneous = curr_ch.nil? ? '' : scanner.scan(/./)
79
+ sequel = scanner.scan(/.{1,20}/)
80
+ erroneous += sequel unless sequel.nil?
81
+ raise ScanError, "Unknown token #{erroneous} on line #{lineno}"
82
+ end
83
+
84
+ return token
85
+ end
86
+
87
+ def build_token(aSymbolName, aLiteral, _format = :default)
88
+ begin
89
+ col = scanner.pos - aLiteral.size - @line_start + 1
90
+ pos = Rley::Lexical::Position.new(@lineno, col)
91
+ token = Rley::Lexical::Token.new(aLiteral, aSymbolName, pos)
92
+ rescue StandardError => e
93
+ puts "Failing with '#{aSymbolName}' and '#{aLiteral}'"
94
+ raise e
95
+ end
96
+
97
+ return token
98
+ end
99
+
100
+ def next_json_token
101
+ curr_ch = scanner.peek(1)
102
+ return nil if curr_ch.nil? || curr_ch.empty?
103
+
104
+ token = nil
105
+
106
+ if ':,."'.include? curr_ch
107
+ # Delimiters, separators => single character token
108
+ token = build_token(@@punct2name[curr_ch], scanner.getch)
109
+ elsif (literal = scanner.scan(/[^\s:;,."]+/))
110
+ token = build_token('WORD', literal)
111
+ else # Unknown token
112
+ erroneous = curr_ch.nil? ? '' : scanner.scan(/./)
113
+ sequel = scanner.scan(/.{1,20}/)
114
+ erroneous += sequel unless sequel.nil?
115
+ raise ScanError, "Unknown token #{erroneous} on line #{lineno}"
116
+ end
117
+
118
+ return token
119
+ end
120
+
121
+ def skip_intertoken_spaces
122
+ pre_pos = scanner.pos
123
+
124
+ loop do
125
+ ws_found = scanner.skip(/[ \t\f]+/) ? true : false
126
+ nl_found = scanner.skip(/(?:\r\n)|\r|\n/)
127
+ if nl_found
128
+ ws_found = true
129
+ next_line
130
+ end
131
+ break unless ws_found
132
+ end
133
+
134
+ curr_pos = scanner.pos
135
+ return if curr_pos == pre_pos
136
+ end
137
+
138
+ def next_line
139
+ @lineno += 1
140
+ @line_start = scanner.pos
141
+ end
142
+ end # class
143
+ end # module
144
+ end # module
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zenlish
4
+ module Trie
5
+ # Abstract class for representing nodes in the trie data structure.
6
+ class BaseTrieNode
7
+ # @return [Hash{String => TrieNode}] the successor nodes
8
+ attr_reader :succ
9
+
10
+ def initialize
11
+ @succ = {}
12
+ end
13
+
14
+ def include?(aKey)
15
+ succ.include?(aKey)
16
+ end
17
+
18
+ def add_succ(aKey, aNode)
19
+ succ[aKey] = aNode
20
+ end
21
+
22
+ def leaf?
23
+ succ.empty?
24
+ end
25
+ end # class
26
+ end # module
27
+ end # module
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'trie_root'
4
+ require_relative 'trie_node'
5
+
6
+ # https://raw.githubusercontent.com/first20hours/google-10000-english/master/20k.txt
7
+ # https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt
8
+
9
+ module Zenlish
10
+ module Trie
11
+ # A trie (aka prefix tree or digital tree) is a kind of search tree.
12
+ class Trie
13
+ # @return [TrieRoot] The root node of the trie data structure
14
+ attr_reader :root
15
+
16
+ def initialize
17
+ @root = TrieRoot.new
18
+ end
19
+
20
+ def add(aWord, aValue)
21
+ append_node(root, aWord, 0, aValue)
22
+ end
23
+
24
+ def search(aWord)
25
+ search_node(root, aWord, 0)
26
+ end
27
+
28
+ private
29
+
30
+ def append_node(aNode, aText, anIndex, aValue)
31
+ key = aText[anIndex]
32
+ unless aNode.include?(key)
33
+ aNode.add_succ(key, TrieNode.new(key))
34
+ end
35
+ successor = aNode.succ[key]
36
+
37
+ if anIndex == aText.size - 1
38
+ current_value = successor.value
39
+ if current_value
40
+ if current_value.kind_of?(Array)
41
+ current_value << aValue
42
+ else
43
+ successor.value = [current_value, aValue]
44
+ end
45
+ else
46
+ successor.value = aValue
47
+ end
48
+ else
49
+ append_node(successor, aText, anIndex + 1, aValue)
50
+ end
51
+ end
52
+
53
+ def search_node(aNode, aText, anIndex)
54
+ key = aText[anIndex]
55
+ return nil unless aNode.include?(key)
56
+
57
+ successor = aNode.succ[key]
58
+ return successor if anIndex == aText.size - 1
59
+
60
+ search_node(successor, aText, anIndex + 1)
61
+ end
62
+ =begin
63
+
64
+
65
+ def include?(word)
66
+ find_word(word) { |found, base| return found && base.word }
67
+ end
68
+
69
+ def add_word(word)
70
+ letters = word.chars
71
+ base = @root
72
+
73
+ letters.each { |letter| base = add_character(letter, base.next) }
74
+
75
+ base.word = true
76
+ end
77
+
78
+ def find_word(word)
79
+ letters = word.chars
80
+ base = @root
81
+
82
+ word_found =
83
+ letters.all? { |letter| base = find_character(letter, base.next) }
84
+
85
+ yield word_found, base if block_given?
86
+
87
+ base
88
+ end
89
+
90
+ def find_words_starting_with(prefix)
91
+ stack = []
92
+ words = []
93
+ prefix_stack = []
94
+
95
+ stack << find_word(prefix)
96
+ prefix_stack << prefix.chars.take(prefix.size-1)
97
+
98
+ return [] unless stack.first
99
+
100
+ until stack.empty?
101
+ node = stack.pop
102
+
103
+ prefix_stack.pop and next if node == :guard_node
104
+
105
+ prefix_stack << node.value
106
+ stack << :guard_node
107
+
108
+ words << prefix_stack.join if node.word
109
+
110
+ node.next.each { |n| stack << n }
111
+ end
112
+
113
+ words
114
+ end
115
+
116
+ private
117
+
118
+ def add_character(character, trie)
119
+ trie.find { |n| n.value == character } || add_node(character, trie)
120
+ end
121
+
122
+ def find_character(character, trie)
123
+ trie.find { |n| n.value == character }
124
+ end
125
+
126
+ def add_node(character, trie)
127
+ TrieNode.new(character).tap { |new_node| trie << new_node }
128
+ end
129
+ =end
130
+ end # class
131
+ end # module
132
+ end # module
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_trie_node'
4
+
5
+ module Zenlish
6
+ module Trie
7
+ class TrieNode < BaseTrieNode
8
+ # @return [String] the matching character
9
+ attr_reader :key
10
+
11
+ # @return [Object, NilClass] Result when this character matches end-of-word.
12
+ attr_accessor :value
13
+
14
+ def initialize(aChar)
15
+ super()
16
+ @key = aChar
17
+ @value = nil
18
+ end
19
+ end # class
20
+ end # module
21
+ end # module
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_trie_node'
4
+
5
+ module Zenlish
6
+ module Trie
7
+ class TrieRoot < BaseTrieNode
8
+ end # class
9
+ end # module
10
+ end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Zenlish
2
- VERSION = '0.2.05'.freeze
4
+ VERSION = '0.2.07'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'word_class'
2
4
 
3
5
  module Zenlish
@@ -7,8 +9,8 @@ module Zenlish
7
9
  # @return [FalseClass] Indicates that an adjective may inflect.
8
10
  def invariable?
9
11
  # TODO: set to false once we introduce the degrees (basic, comparative, superlative)
10
- true
11
- end
12
+ true
13
+ end
12
14
  end # class
13
15
  end # module
14
16
  end # module
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'word_class'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
7
  # TODO: document
6
- class Adverb < WordClass
8
+ class Adverb < WordClass
7
9
  end # class
8
10
  end # module
9
11
  end # module
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'adverb'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
- # The adverb maybe expresses uncertainty and is often placed in front
7
+ # The adverb maybe expresses uncertainty and is often placed in front
6
8
  # of clauses.
7
9
  class AdverbMaybe < Adverb
8
10
  end # class
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'adverb'
2
4
 
3
5
  module Zenlish
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Load the WordClass class hierarchy
2
4
  # Algorithm: load the leaf classes from hierarchy
3
5
 
@@ -43,4 +45,4 @@ require_relative 'fronting_quantifier'
43
45
  require_relative 'regular_verb'
44
46
  require_relative 'regular_verb_want'
45
47
  require_relative 'relative_pronoun'
46
- require_relative 'subordinating_conjunction'
48
+ require_relative 'subordinating_conjunction'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'determiner'
2
4
 
3
5
  module Zenlish
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'verb'
2
4
 
3
5
  module Zenlish
@@ -1,20 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'auxiliary'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
7
  class AuxiliaryBe < Auxiliary
6
- def initialize
7
- super()
8
- end
8
+ # rubocop: disable Layout/SpaceInsideArrayLiteralBrackets
9
9
 
10
10
  private
11
11
 
12
12
  def init_feature_defs
13
13
  super
14
14
  # Create standard feature definitions for modal verb can.
15
- feature_def_dsl {
15
+ feature_def_dsl do
16
16
  feature_def 'PARADIGM' => [identifier, 'Verb_be_inflection'] # 2nd item is default value
17
- }
17
+ end
18
18
  end
19
19
 
20
20
  def init_paradigms
@@ -35,7 +35,8 @@ module Zenlish
35
35
  rule([dont_care, dont_care, equals(:past_participle)], literal('been'))
36
36
  end
37
37
  add_paradigm(table)
38
- end
38
+ end
39
+ # rubocop: enable Layout/SpaceInsideArrayLiteralBrackets
39
40
  end # class
40
41
  end # module
41
42
  end # module
@@ -1,21 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'auxiliary'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
7
  # TODO: document
6
8
  class AuxiliaryDo < Auxiliary
7
- def initialize
8
- super()
9
- end
9
+ # rubocop: disable Layout/SpaceInsideArrayLiteralBrackets
10
10
 
11
11
  private
12
12
 
13
13
  def init_feature_defs
14
14
  super
15
15
  # Create standard feature definitions for modal verb can.
16
- feature_def_dsl {
16
+ feature_def_dsl do
17
17
  feature_def 'PARADIGM' => [identifier, 'Verb_do_inflection'] # 2nd item is default value
18
- }
18
+ end
19
19
  end
20
20
 
21
21
  def init_paradigms
@@ -34,6 +34,7 @@ module Zenlish
34
34
  end
35
35
  add_paradigm(table)
36
36
  end
37
+ # rubocop: enable Layout/SpaceInsideArrayLiteralBrackets
37
38
  end # class
38
39
  end # module
39
40
  end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'numeral'
2
4
 
3
5
  module Zenlish
@@ -6,4 +8,4 @@ module Zenlish
6
8
  class Cardinal < Numeral
7
9
  end # class
8
10
  end # module
9
- end # module
11
+ end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'noun'
2
4
  require_relative '../inflect/inflection_table_builder'
3
5
 
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'word_class'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
- # TODO: document
7
+ # TODO: document
6
8
  # Example: 'as' in 'same ... as'
7
- class ComparativeParticle < WordClass
9
+ class ComparativeParticle < WordClass
8
10
  end # class
9
11
  end # module
10
- end # module
12
+ end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'word_class'
2
4
 
3
5
  module Zenlish
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'pronoun'
2
4
 
3
5
  module Zenlish
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'conjunction'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
- # A coordinator (aka coordinating conjunction) is a word or phrase that
7
+ # A coordinator (aka coordinating conjunction) is a word or phrase that
6
8
  # can join words, phrases, and clauses that share some logical relationhip
7
9
  # Common coordinators are enumerated in the FANBOYS acronym:
8
10
  # For, And, Nor, But, Or, Yet and So.
9
- class Coordinator < WordClass
11
+ class Coordinator < WordClass
10
12
  end # class
11
13
  end # module
12
14
  end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'article'
2
4
 
3
5
  module Zenlish
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'adverb'
2
4
 
3
5
  module Zenlish
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'determiner'
2
4
  require_relative '../inflect/inflection_table_builder'
3
5
 
@@ -10,7 +12,7 @@ module Zenlish
10
12
  super()
11
13
  init_feature_defs
12
14
  init_paradigms
13
- end
15
+ end
14
16
 
15
17
  # @return [FalseClass] Indicates that demonstrative determiners inflects.
16
18
  def invariable?
@@ -21,11 +23,11 @@ module Zenlish
21
23
 
22
24
  def init_feature_defs
23
25
  # Create standard feature definitions for irregular verbs.
24
- feature_def_dsl {
26
+ feature_def_dsl do
25
27
  feature_def 'NUMBER' => enumeration(:singular, :plural)
26
28
  feature_def 'DISTANCE' => enumeration(:near, :far)
27
29
  feature_def 'PARADIGM' => [identifier, 'Demonstrative_det_paradigm'] # 2nd item is default value
28
- }
30
+ end
29
31
  end
30
32
 
31
33
  def init_paradigms
@@ -37,7 +39,7 @@ module Zenlish
37
39
  rule([equals(:singular), equals(:near)], func('base_form'))
38
40
  rule([equals(:singular), equals(:far)], literal('that'))
39
41
  rule([equals(:plural), equals(:near)], literal('these'))
40
- rule([equals(:plural), equals(:far), ], literal('those'))
42
+ rule([equals(:plural), equals(:far)], literal('those'))
41
43
  end
42
44
  add_paradigm(table)
43
45
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'pronoun'
2
4
 
3
5
  module Zenlish
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'word_class'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
7
  # TODO: document
6
- class Determiner < WordClass
8
+ class Determiner < WordClass
7
9
  end # class
8
10
  end # module
9
11
  end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'determiner'
2
4
 
3
5
  module Zenlish
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'pronoun'
2
4
 
3
5
  module Zenlish
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'quantifier'
2
4
 
3
5
  module Zenlish
4
6
  module WClasses
5
7
  # Quantifiers that appear in front of determiners: all, both
6
- class FrontingQuantifier < Quantifier
8
+ class FrontingQuantifier < Quantifier
7
9
  end # class
8
10
  end # module
9
11
  end # module
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'article'
2
4
 
3
5
  module Zenlish
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'pronoun'
2
4
 
3
5
  module Zenlish
@@ -6,4 +8,4 @@ module Zenlish
6
8
  class IndefinitePronoun < Pronoun
7
9
  end # class
8
10
  end # module
9
- end # module
11
+ end # module