zenlish 0.2.00 → 0.2.01
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -2
- data/README.md +1 -1
- data/lib/zenlish/inflect/function_call.rb +17 -0
- data/lib/zenlish/inflect/inflection_table.rb +8 -3
- data/lib/zenlish/inflect/inflection_table_builder.rb +23 -0
- data/lib/zenlish/inflect/membership.rb +25 -0
- data/lib/zenlish/inflect/not_equals_literal.rb +25 -0
- data/lib/zenlish/lang/dictionary.rb +4 -2
- data/lib/zenlish/lex/lexeme.rb +13 -8
- data/lib/zenlish/version.rb +1 -1
- data/lib/zenlish/wclasses/common_noun.rb +2 -2
- data/lib/zenlish/wclasses/irregular_verb.rb +25 -1
- data/lib/zenlish/wclasses/lexical_verb.rb +3 -1
- data/lib/zenlish/wclasses/regular_verb.rb +32 -0
- data/lib/zenlish/wclasses/verb.rb +17 -0
- data/spec/zenlish/inflect/equals_literal_spec.rb +1 -1
- data/spec/zenlish/inflect/function_call_spec.rb +32 -0
- data/spec/zenlish/inflect/inflection_table_builder_spec.rb +81 -1
- data/spec/zenlish/inflect/membership_spec.rb +60 -0
- data/spec/zenlish/inflect/not_equals_literal_spec.rb +58 -0
- data/spec/zenlish/lex/lexeme_spec.rb +4 -0
- data/spec/zenlish/wclasses/irregular_verb_spec.rb +3 -2
- data/spec/zenlish/wclasses/lexical_verb_spec.rb +28 -0
- data/spec/zenlish/wclasses/regular_verb_spec.rb +91 -0
- data/spec/zenlish/wclasses/verb_spec.rb +7 -1
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18b53b01ebe8e3f9a895026ae2b63c7753081ed12572a16d75dc35f943b479e9
|
4
|
+
data.tar.gz: 74def3a1abe88f1fa457ee151bd2420c682aedbeecf36a62a857b5e0327e43ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7d8a33af3c91ab977a7f7ca9addd6ba0929e662c599dd0e5d3d5bbb3c3eb4ced11f765ce7e62c59e152600cccc94122e33066416faaab66c2893a207d89de6c
|
7
|
+
data.tar.gz: 9649988e311bfaccd0ed8ca12b1c648eddec01b27f4b3549c7518cb62e725ed03ecfb1c2de1459434b0a481aaa68bff1a4f978cf4ae33f7a3983e35b3614efe7
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
|
+
## [0.2.01] - 2020-02-02
|
3
|
+
Extending the inflection table capabilities.
|
4
|
+
Extending the inflection model to regular verbs. Zenlish can inflect all regular verbs in its dictionary.
|
5
|
+
|
6
|
+
### Added
|
7
|
+
- Class `Inflect::FunctionCall` Now an inflection table can invoke a method of the lexeme argument.
|
8
|
+
- Class `Inflect::Membership` Now an inflection table can test whether a value is included in a set of values.
|
9
|
+
- Class `Inflect::NotEquals` Now an inflection table can test for inequality
|
10
|
+
|
2
11
|
|
3
12
|
## [0.2.00] - 2020-01-30
|
4
13
|
A lot of internal additions, such an initial feature model, embryonic inflection model.
|
@@ -14,8 +23,6 @@ This is WIP.
|
|
14
23
|
- Class `WordClass` ca have its own set of feature definitions.
|
15
24
|
- Class `Noun` has the feature definitions for: `NUMBER`, `COUNTABILITY` and `PARADIGM`
|
16
25
|
|
17
|
-
|
18
|
-
|
19
26
|
## [0.1.25] - 2019-12-06
|
20
27
|
__Zenlish__ can parse all sentences in lesson 1, 2 and 3-A .. 3-G (352 sentences in total) from
|
21
28
|
[Learn These Words First](http://learnthesewordsfirst.com/).
|
data/README.md
CHANGED
@@ -136,7 +136,7 @@ The milestone sub-goals are:
|
|
136
136
|
- Zenlish should be able to parse all the example sentences
|
137
137
|
|
138
138
|
#### B) Associate lexical features to terms in lexicon
|
139
|
-
The sub-goals are:
|
139
|
+
*STARTED* The sub-goals are:
|
140
140
|
- To enrich the lexicon entries with lexical and syntactical features.
|
141
141
|
- Zenlish should be able to derive the declensions of nouns, conjugation of verbs,
|
142
142
|
- Also Zenlish should detect agreement errors
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'atomic_o_expression'
|
2
|
+
|
3
|
+
module Zenlish
|
4
|
+
module Inflect
|
5
|
+
class FunctionCall < AtomicOExpression
|
6
|
+
attr_reader :mth_name
|
7
|
+
|
8
|
+
def initialize(aMethodName)
|
9
|
+
@mth_name = aMethodName
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate(_headings, lexeme, _values)
|
13
|
+
lexeme.send(mth_name)
|
14
|
+
end
|
15
|
+
end # class
|
16
|
+
end # module
|
17
|
+
end # module
|
@@ -21,12 +21,17 @@ module Zenlish
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def inflect(aLexeme, theConstraints)
|
24
|
+
constraints = if theConstraints.nil? || theConstraints.empty?
|
25
|
+
Array.new(headings.size) { |_i| nil }
|
26
|
+
else
|
27
|
+
theConstraints
|
28
|
+
end
|
24
29
|
err_msg = "Table has #{headings.size} headings."
|
25
|
-
raise StandardError, err_msg if
|
30
|
+
raise StandardError, err_msg if constraints.size != headings.size
|
26
31
|
actuals = []
|
27
32
|
headings.each_with_index do |hd, idx|
|
28
|
-
if
|
29
|
-
actuals <<
|
33
|
+
if constraints[idx]
|
34
|
+
actuals << constraints[idx]
|
30
35
|
else
|
31
36
|
actuals << hd.evaluate_for(aLexeme)
|
32
37
|
end
|
@@ -2,9 +2,12 @@ require_relative 'feature_heading'
|
|
2
2
|
require_relative 'method_heading'
|
3
3
|
require_relative 'formal_argument'
|
4
4
|
require_relative 'equals_literal'
|
5
|
+
require_relative 'not_equals_literal'
|
5
6
|
require_relative 'unconditionally_true'
|
6
7
|
require_relative 'matches_pattern'
|
8
|
+
require_relative 'membership'
|
7
9
|
require_relative 'input_asis'
|
10
|
+
require_relative 'function_call'
|
8
11
|
require_relative 'concatenation'
|
9
12
|
require_relative 'substitution'
|
10
13
|
require_relative 'inflection_rule'
|
@@ -73,6 +76,22 @@ module Zenlish
|
|
73
76
|
equality_cond
|
74
77
|
end
|
75
78
|
|
79
|
+
def not_equal(aValue)
|
80
|
+
arg = FormalArgument.new(conds.size)
|
81
|
+
inequality_cond = NotEqualsLiteral.new(arg, aValue)
|
82
|
+
conds << inequality_cond
|
83
|
+
|
84
|
+
inequality_cond
|
85
|
+
end
|
86
|
+
|
87
|
+
def in?(*theMembers)
|
88
|
+
arg = FormalArgument.new(conds.size)
|
89
|
+
membership_cond = Membership.new(arg, theMembers)
|
90
|
+
conds << membership_cond
|
91
|
+
|
92
|
+
membership_cond
|
93
|
+
end
|
94
|
+
|
76
95
|
def dont_care
|
77
96
|
item = UnconditionallyTrue.new
|
78
97
|
conds << item
|
@@ -95,6 +114,10 @@ module Zenlish
|
|
95
114
|
match_cond
|
96
115
|
end
|
97
116
|
|
117
|
+
def func(aFuncName)
|
118
|
+
FunctionCall.new(aFuncName)
|
119
|
+
end
|
120
|
+
|
98
121
|
def sub(original, pattern, replacement)
|
99
122
|
Substitution.new(original, pattern, replacement)
|
100
123
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'unary_input_expression'
|
2
|
+
|
3
|
+
module Zenlish
|
4
|
+
module Inflect
|
5
|
+
class Membership < UnaryInputExpression
|
6
|
+
attr_reader :members
|
7
|
+
|
8
|
+
def initialize(anArgument, theMembers)
|
9
|
+
super(anArgument)
|
10
|
+
@members = theMembers
|
11
|
+
end
|
12
|
+
|
13
|
+
def success?(headings, lexeme, actuals)
|
14
|
+
if actuals.empty?
|
15
|
+
hd = headings[argument.index]
|
16
|
+
feat_def = hd.evaluate_for(lexeme)
|
17
|
+
members.all? { |memb| feat_def.domain.include?(memb) }
|
18
|
+
else
|
19
|
+
val = actuals[argument.index]
|
20
|
+
members.include?(val)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end # class
|
24
|
+
end # module
|
25
|
+
end # module
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'unary_input_expression'
|
2
|
+
|
3
|
+
module Zenlish
|
4
|
+
module Inflect
|
5
|
+
class NotEqualsLiteral < UnaryInputExpression
|
6
|
+
attr_reader :literal
|
7
|
+
|
8
|
+
def initialize(anArgument, aLiteral)
|
9
|
+
super(anArgument)
|
10
|
+
@literal = aLiteral
|
11
|
+
end
|
12
|
+
|
13
|
+
def success?(headings, lexeme, actuals)
|
14
|
+
if actuals.empty?
|
15
|
+
hd = headings[argument.index]
|
16
|
+
feat_def = hd.evaluate_for(lexeme)
|
17
|
+
!feat_def.domain.include?(literal)
|
18
|
+
else
|
19
|
+
val = actuals[argument.index]
|
20
|
+
val != literal
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end # class
|
24
|
+
end # module
|
25
|
+
end # module
|
@@ -14,11 +14,13 @@ unless defined?(Zenlish::Lang::Dictionary)
|
|
14
14
|
# @param aLemma [String] is the canonical form, dictionary form,
|
15
15
|
# or citation form of a headword.
|
16
16
|
# @param aWClassName [String] the name of a word class.
|
17
|
-
def self.add_entry(aLemma, aWClassName, aFeatureHash = nil)
|
17
|
+
def self.add_entry(aLemma, aWClassName, aFeatureHash = nil, &aBlock)
|
18
18
|
entry = Zenlish::Lex::LexicalEntry.new(aLemma)
|
19
19
|
wclass = Dictionary.name2terminal[aWClassName]
|
20
20
|
raise StandardError, "Undefined word class for '#{aLemma}'" unless wclass
|
21
|
-
lexeme = Zenlish::Lex::Lexeme.new(wclass, entry, aFeatureHash)
|
21
|
+
lexeme = Zenlish::Lex::Lexeme.new(wclass, entry, aFeatureHash)
|
22
|
+
lexeme.instance_exec(&aBlock) if block_given?
|
23
|
+
lexeme.freeze
|
22
24
|
Dictionary.add_entry(entry.freeze)
|
23
25
|
end
|
24
26
|
|
data/lib/zenlish/lex/lexeme.rb
CHANGED
@@ -7,8 +7,8 @@ module Zenlish
|
|
7
7
|
# relate to the lexeme for verb 'hide'. Also called 'dictionary word'.
|
8
8
|
class Lexeme
|
9
9
|
include Feature::FeatureStructDefBearer
|
10
|
-
|
11
|
-
# @return [Zenlish::WClasses::WordClass]
|
10
|
+
|
11
|
+
# @return [Zenlish::WClasses::WordClass] the word class to which the lexeme belongs
|
12
12
|
attr_reader :wclass
|
13
13
|
|
14
14
|
# @param aWClass [WClasses::WordClass, Rley::Syntax::Terminal]
|
@@ -18,32 +18,37 @@ module Zenlish
|
|
18
18
|
@wclass = aWClass
|
19
19
|
@entry = anEntry.object_id
|
20
20
|
anEntry.add_lexeme(self)
|
21
|
-
|
21
|
+
|
22
22
|
p_struct = aWClass.kind_of?(WClasses::WordClass) ? aWClass.struct : nil
|
23
23
|
overriding_struct_defs = aFeatureHash.nil? ? {} : aFeatureHash
|
24
24
|
init_struct_def(p_struct, overriding_struct_defs)
|
25
25
|
end
|
26
26
|
|
27
|
-
# @return [Zenlish::Lex::LexicalEntry]
|
27
|
+
# @return [Zenlish::Lex::LexicalEntry] Link to its dictionary entry (headword)
|
28
28
|
def entry
|
29
29
|
ObjectSpace._id2ref(@entry)
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
|
+
# Inflect the lexeme according the default paradigm of the word class.
|
33
|
+
# @param constraints [Array] Array of values (for each heading of inflection table
|
34
|
+
# @return [String] The word form (spelling) inflected to the given contraints.
|
32
35
|
def inflect(constraints)
|
33
36
|
table = paradigm
|
34
37
|
table.inflect(self, constraints)
|
35
38
|
end
|
36
39
|
|
37
|
-
# @return [String]
|
40
|
+
# @return [String] the base (dictionary) form.
|
38
41
|
def lemma
|
39
42
|
entry.lemma
|
40
43
|
end
|
41
44
|
|
45
|
+
# Return the inflection paradigm for the lexeme.
|
46
|
+
# @return [Inflect::InflectionTable]
|
42
47
|
def paradigm
|
43
48
|
paradigm_feat_def = self['PARADIGM']
|
44
|
-
wclass.paradigms[paradigm_feat_def.default.val]
|
49
|
+
wclass.paradigms[paradigm_feat_def.default.val]
|
45
50
|
end
|
46
|
-
|
51
|
+
|
47
52
|
alias base_form lemma
|
48
53
|
end # class
|
49
54
|
end # module
|
data/lib/zenlish/version.rb
CHANGED
@@ -26,8 +26,8 @@ module Zenlish
|
|
26
26
|
feature_heading 'NUMBER'
|
27
27
|
method_heading 'base_form'
|
28
28
|
rule([equals(:singular), dont_care], col('base_form'))
|
29
|
-
rule([equals(:plural),
|
30
|
-
rule([equals(:plural),
|
29
|
+
rule([equals(:plural), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ies'))
|
30
|
+
rule([equals(:plural), dont_care], concat(col('base_form'), 's'))
|
31
31
|
end
|
32
32
|
add_paradigm(table)
|
33
33
|
|
@@ -2,8 +2,32 @@ require_relative 'lexical_verb'
|
|
2
2
|
|
3
3
|
module Zenlish
|
4
4
|
module WClasses
|
5
|
-
# TODO: document
|
6
5
|
class IrregularVerb < LexicalVerb
|
6
|
+
# @return [Array<String>] [the past simple form, past participle form].
|
7
|
+
attr_writer :forms
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super()
|
11
|
+
init_feature_defs
|
12
|
+
end
|
13
|
+
|
14
|
+
def past_simple
|
15
|
+
raise StandardError
|
16
|
+
end
|
17
|
+
|
18
|
+
def past_participle
|
19
|
+
raise StandardError
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def init_feature_defs
|
25
|
+
super()
|
26
|
+
# Define standard feature definitions for irregular verbs.
|
27
|
+
feature_def_dsl {
|
28
|
+
feature_def 'PARADIGM' => [identifier, 'Irregular_form'] # 2nd item is default value
|
29
|
+
}
|
30
|
+
end
|
7
31
|
end # class
|
8
32
|
end # module
|
9
33
|
end # module
|
@@ -4,6 +4,38 @@ module Zenlish
|
|
4
4
|
module WClasses
|
5
5
|
# TODO: document 'touch'
|
6
6
|
class RegularVerb < LexicalVerb
|
7
|
+
def initialize
|
8
|
+
super
|
9
|
+
@paradigms = {}
|
10
|
+
init_paradigms
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def init_paradigms
|
16
|
+
builder = Inflect::InflectionTableBuilder.new
|
17
|
+
table = builder.build('Regular_inflection') do
|
18
|
+
feature_heading 'PERSON'
|
19
|
+
feature_heading 'NUMBER'
|
20
|
+
feature_heading 'TIME'
|
21
|
+
method_heading 'base_form'
|
22
|
+
# PERSON NUMBER TIME base_form
|
23
|
+
rule([not_equal(:third), dont_care, equals(:present), dont_care], col('base_form'))
|
24
|
+
rule([equals(:third), equals(:singular), equals(:present), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ies'))
|
25
|
+
rule([equals(:third), equals(:singular), equals(:present), matches(/(?:[osxz]|ch|sh)$/)], concat(col('base_form'), 'es'))
|
26
|
+
rule([equals(:third), equals(:singular), equals(:present), dont_care], concat(col('base_form'), 's'))
|
27
|
+
rule([dont_care, dont_care, equals(:progressive), matches(/e$/)], sub(col('base_form'), /e$/, 'ing'))
|
28
|
+
rule([dont_care, dont_care, equals(:progressive), dont_care], concat(col('base_form'), 'ing'))
|
29
|
+
rule([dont_care, dont_care, in?(:past_simple, :past_participle), matches(/e$/)], concat(col('base_form'), 'd'))
|
30
|
+
rule([dont_care, dont_care, in?(:past_simple, :past_participle), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ied'))
|
31
|
+
rule([dont_care, dont_care, in?(:past_simple, :past_participle), dont_care], concat(col('base_form'), 'ed'))
|
32
|
+
end
|
33
|
+
add_paradigm(table)
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_paradigm(anInflectionTable)
|
37
|
+
@paradigms[anInflectionTable.name] = anInflectionTable
|
38
|
+
end
|
7
39
|
end # class
|
8
40
|
end # module
|
9
41
|
end # module
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'word_class'
|
2
|
+
require_relative '../inflect/inflection_table_builder'
|
2
3
|
|
3
4
|
module Zenlish
|
4
5
|
module WClasses
|
@@ -6,12 +7,28 @@ module Zenlish
|
|
6
7
|
# notionally as a 'doing' word (i.e. a word that describes the action
|
7
8
|
# in a clause).
|
8
9
|
class Verb < WordClass
|
10
|
+
def initialize
|
11
|
+
super()
|
12
|
+
init_feature_defs
|
13
|
+
end
|
9
14
|
|
10
15
|
# As all verbs inflect, or change form, to reflect changes in tense,
|
11
16
|
# person, number, and voice, they are, by definition, variable.
|
12
17
|
def invariable?
|
13
18
|
false
|
14
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def init_feature_defs
|
24
|
+
# Create standard feature definitions for lexical verbs.
|
25
|
+
feature_def_dsl {
|
26
|
+
feature_def 'NUMBER' => enumeration(:singular, :plural)
|
27
|
+
feature_def 'PERSON' => enumeration(:first, :second, :third)
|
28
|
+
feature_def 'TIME' => enumeration(:present, :progressive, :past_simple, :past_participle)
|
29
|
+
feature_def 'PARADIGM' => [identifier, 'Regular_inflection'] # 2nd item is default value
|
30
|
+
}
|
31
|
+
end
|
15
32
|
end # class
|
16
33
|
end # module
|
17
34
|
end # module
|
@@ -16,7 +16,7 @@ module Zenlish
|
|
16
16
|
subject { EqualsLiteral.new(an_argument, feat_val) }
|
17
17
|
|
18
18
|
context 'Initialization:' do
|
19
|
-
it 'should be initialized with a
|
19
|
+
it 'should be initialized with a formal argument and a literal' do
|
20
20
|
expect { EqualsLiteral.new(an_argument, feat_val) }.not_to raise_error
|
21
21
|
end
|
22
22
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
# Load the class under test
|
5
|
+
require_relative '../../../lib/zenlish/inflect/function_call'
|
6
|
+
|
7
|
+
module Zenlish
|
8
|
+
module Inflect
|
9
|
+
describe FunctionCall do
|
10
|
+
subject { FunctionCall.new('greet') }
|
11
|
+
|
12
|
+
context 'Initialization:' do
|
13
|
+
it 'should be initialized with a text literal' do
|
14
|
+
expect { FunctionCall.new('greet') }.not_to raise_error
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should know its method name' do
|
18
|
+
expect(subject.mth_name).to eq('greet')
|
19
|
+
end
|
20
|
+
end # context
|
21
|
+
|
22
|
+
context 'Provided services:' do
|
23
|
+
it 'should return the affix during word form generation' do
|
24
|
+
headings = double('fake-headings')
|
25
|
+
lexeme = OpenStruct.new(:greet => 'Hello, world')
|
26
|
+
values = double('fake-values')
|
27
|
+
expect(subject.generate(headings, lexeme, values)).to eq('Hello, world')
|
28
|
+
end
|
29
|
+
end # context
|
30
|
+
end # describe
|
31
|
+
end # module
|
32
|
+
end # module
|
@@ -97,7 +97,7 @@ module Zenlish
|
|
97
97
|
|
98
98
|
MockFeatureBearer = Struct.new(:NUMBER, :base_form)
|
99
99
|
|
100
|
-
it 'should build
|
100
|
+
it 'should build default paradigm for common nouns' do
|
101
101
|
table = subject.build('Common_form') do
|
102
102
|
feature_heading 'NUMBER'
|
103
103
|
method_heading 'base_form'
|
@@ -121,6 +121,86 @@ module Zenlish
|
|
121
121
|
mck_3['NUMBER'] = :plural
|
122
122
|
expect(table.inflect(mck_3, [nil, nil])).to eq('bodies')
|
123
123
|
end
|
124
|
+
|
125
|
+
MockRegularVerb = Struct.new(:base_form, :PERSON, :NUMBER, :TIME)
|
126
|
+
it 'should build default paradigm for regular verbs' do
|
127
|
+
table = subject.build('Regular_form') do
|
128
|
+
feature_heading 'PERSON'
|
129
|
+
feature_heading 'NUMBER'
|
130
|
+
feature_heading 'TIME'
|
131
|
+
method_heading 'base_form'
|
132
|
+
# PERSON NUMBER TIME base_form
|
133
|
+
rule([not_equal(:third), dont_care, equals(:present), dont_care], col('base_form'))
|
134
|
+
rule([equals(:third), equals(:singular), equals(:present), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ies'))
|
135
|
+
rule([equals(:third), equals(:singular), equals(:present), matches(/(?:[osxz]|ch|sh)$/)], concat(col('base_form'), 'es'))
|
136
|
+
rule([equals(:third), equals(:singular), equals(:present), dont_care], concat(col('base_form'), 's'))
|
137
|
+
rule([dont_care, dont_care, equals(:progressive), matches(/e$/)], sub(col('base_form'), /e$/, 'ing'))
|
138
|
+
rule([dont_care, dont_care, equals(:progressive), dont_care], concat(col('base_form'), 'ing'))
|
139
|
+
rule([dont_care, dont_care, in?(:past_simple, :past_participle), matches(/e$/)], concat(col('base_form'), 'd'))
|
140
|
+
rule([dont_care, dont_care, in?(:past_simple, :past_participle), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ied'))
|
141
|
+
rule([dont_care, dont_care, in?(:past_simple, :past_participle), dont_care], concat(col('base_form'), 'ed'))
|
142
|
+
end
|
143
|
+
|
144
|
+
verb_1 = MockRegularVerb.new('belong', :first, :singular, :present)
|
145
|
+
expect(table.inflect(verb_1, [nil, nil, nil, nil] )).to eq('belong')
|
146
|
+
expect(table.inflect(verb_1, [:third, nil, nil, nil] )).to eq('belongs')
|
147
|
+
expect(table.inflect(verb_1, [nil, :plural, nil, nil] )).to eq('belong')
|
148
|
+
expect(table.inflect(verb_1, [nil, nil, :progressive, nil] )).to eq('belonging')
|
149
|
+
expect(table.inflect(verb_1, [nil, nil, :past_simple, nil] )).to eq('belonged')
|
150
|
+
expect(table.inflect(verb_1, [nil, nil, :past_participle, nil])).to eq('belonged')
|
151
|
+
|
152
|
+
verb_2 = MockRegularVerb.new('try', :first, :singular, :present)
|
153
|
+
expect(table.inflect(verb_2, [nil, nil, nil, nil] )).to eq('try')
|
154
|
+
expect(table.inflect(verb_2, [:third, nil, nil, nil] )).to eq('tries')
|
155
|
+
expect(table.inflect(verb_2, [nil, :plural, nil, nil] )).to eq('try')
|
156
|
+
expect(table.inflect(verb_2, [nil, nil, :progressive, nil] )).to eq('trying')
|
157
|
+
expect(table.inflect(verb_2, [nil, nil, :past_simple, nil] )).to eq('tried')
|
158
|
+
expect(table.inflect(verb_2, [nil, nil, :past_participle, nil])).to eq('tried')
|
159
|
+
|
160
|
+
verb_3 = MockRegularVerb.new('touch', :first, :singular, :present)
|
161
|
+
expect(table.inflect(verb_3, [:second,nil, nil, nil] )).to eq('touch')
|
162
|
+
expect(table.inflect(verb_3, [:third, nil, nil, nil] )).to eq('touches')
|
163
|
+
expect(table.inflect(verb_3, [nil, :plural, nil, nil] )).to eq('touch')
|
164
|
+
expect(table.inflect(verb_3, [nil, nil, :progressive, nil] )).to eq('touching')
|
165
|
+
expect(table.inflect(verb_3, [nil, nil, :past_simple, nil] )).to eq('touched')
|
166
|
+
expect(table.inflect(verb_3, [nil, nil, :past_participle, nil])).to eq('touched')
|
167
|
+
|
168
|
+
verb_4 = MockRegularVerb.new('cause', :first, :singular, :present)
|
169
|
+
expect(table.inflect(verb_4, [nil, nil, nil, nil] )).to eq('cause')
|
170
|
+
expect(table.inflect(verb_4, [:third, nil, nil, nil] )).to eq('causes')
|
171
|
+
expect(table.inflect(verb_4, [nil, :plural, nil, nil] )).to eq('cause')
|
172
|
+
expect(table.inflect(verb_4, [nil, nil, :progressive, nil] )).to eq('causing')
|
173
|
+
expect(table.inflect(verb_4, [nil, nil, :past_simple, nil] )).to eq('caused')
|
174
|
+
expect(table.inflect(verb_4, [nil, nil, :past_participle, nil])).to eq('caused')
|
175
|
+
end
|
176
|
+
|
177
|
+
# MockIrregularVerb = Struct.new(:base_form, :PERSON, :NUMBER, :TIME)
|
178
|
+
# it 'should build default paradigm for irregular verbs' do
|
179
|
+
# table = subject.build('Irregular_form') do
|
180
|
+
# feature_heading 'PERSON'
|
181
|
+
# feature_heading 'NUMBER'
|
182
|
+
# feature_heading 'TIME'
|
183
|
+
# method_heading 'base_form'
|
184
|
+
# # PERSON NUMBER TIME base_form
|
185
|
+
# rule([not_equal(:third), dont_care, equals(:present), dont_care], col('base_form'))
|
186
|
+
# rule([equals(:third), equals(:singular), equals(:present), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ies'))
|
187
|
+
# rule([equals(:third), equals(:singular), equals(:present), matches(/(?:[osxz]|ch|sh)$/)], concat(col('base_form'), 'es'))
|
188
|
+
# rule([equals(:third), equals(:singular), equals(:present), dont_care], concat(col('base_form'), 's'))
|
189
|
+
# rule([dont_care, dont_care, equals(:progressive), matches(/e$/)], sub(col('base_form'), /e$/, 'ing'))
|
190
|
+
# rule([dont_care, dont_care, equals(:progressive), dont_care], concat(col('base_form'), 'ing'))
|
191
|
+
# rule([dont_care, dont_care, in?(:past_simple, :past_participle), matches(/e$/)], concat(col('base_form'), 'd'))
|
192
|
+
# rule([dont_care, dont_care, in?(:past_simple, :past_participle), matches(/[^aeiouy]y$/)], sub(col('base_form'), /y$/, 'ied'))
|
193
|
+
# rule([dont_care, dont_care, in?(:past_simple, :past_participle), dont_care], concat(col('base_form'), 'ed'))
|
194
|
+
# end
|
195
|
+
|
196
|
+
# verb_1 = MockIrregularVerb.new('choose', :first, :singular, :present)
|
197
|
+
# expect(table.inflect(verb_1, [nil, nil, nil, nil] )).to eq('choose')
|
198
|
+
# expect(table.inflect(verb_1, [:third, nil, nil, nil] )).to eq('chooses')
|
199
|
+
# expect(table.inflect(verb_1, [nil, :plural, nil, nil] )).to eq('choose')
|
200
|
+
# expect(table.inflect(verb_1, [nil, nil, :progressive, nil] )).to eq('choosing')
|
201
|
+
# expect(table.inflect(verb_1, [nil, nil, :past_simple, nil] )).to eq('chose')
|
202
|
+
# expect(table.inflect(verb_1, [nil, nil, :past_participle, nil])).to eq('chosen')
|
203
|
+
# end
|
124
204
|
end # context
|
125
205
|
end # describe
|
126
206
|
end # module
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../lib/zenlish/wclasses/common_noun'
|
4
|
+
require_relative '../../../lib/zenlish/lex/lexeme'
|
5
|
+
require_relative '../../../lib/zenlish/lex/lexical_entry'
|
6
|
+
require_relative '../../../lib/zenlish/inflect/feature_heading'
|
7
|
+
require_relative '../../../lib/zenlish/inflect/formal_argument'
|
8
|
+
# Load the class under test
|
9
|
+
require_relative '../../../lib/zenlish/inflect/membership'
|
10
|
+
|
11
|
+
module Zenlish
|
12
|
+
module Inflect
|
13
|
+
describe Membership do
|
14
|
+
let(:an_argument) { FormalArgument.new(1) }
|
15
|
+
let(:feat_val) { [:singular, :plural] }
|
16
|
+
subject { Membership.new(an_argument, feat_val) }
|
17
|
+
|
18
|
+
context 'Initialization:' do
|
19
|
+
it 'should be initialized with a formal argument and an array' do
|
20
|
+
expect { Membership.new(an_argument, feat_val) }.not_to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should know its argument' do
|
24
|
+
expect(subject.argument).to eq(an_argument)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should know the array of literals' do
|
28
|
+
expect(subject.members).to eq(feat_val)
|
29
|
+
end
|
30
|
+
end # context
|
31
|
+
|
32
|
+
context 'Provided services:' do
|
33
|
+
it 'should test the actual values' do
|
34
|
+
lexeme = double('dummy-lexeme')
|
35
|
+
headings = double('fake-headings')
|
36
|
+
actual_args = [nil, :plural, nil]
|
37
|
+
expect(subject.success?(headings, lexeme, actual_args)).to be_truthy
|
38
|
+
actual_args[1] = :singular
|
39
|
+
expect(subject.success?(headings, lexeme, actual_args)).to be_truthy
|
40
|
+
actual_args[1] = :dual
|
41
|
+
expect(subject.success?(headings, lexeme, actual_args)).to be_falsy
|
42
|
+
end
|
43
|
+
|
44
|
+
# it 'should test the lexeme' do
|
45
|
+
# c_noun = WClasses::CommonNoun.new
|
46
|
+
# entry = Lex::LexicalEntry.new('animal')
|
47
|
+
# lexeme = Lex::Lexeme.new(c_noun, entry)
|
48
|
+
# headings = [nil, FeatureHeading.new('NUMBER'), nil]
|
49
|
+
# expect(subject.success?(headings, lexeme, [])).to be_truthy
|
50
|
+
|
51
|
+
# instance = Membership.new(an_argument, :singular)
|
52
|
+
# expect(instance.success?(headings, lexeme, [])).to be_truthy
|
53
|
+
|
54
|
+
# instance = Membership.new(an_argument, :irregular)
|
55
|
+
# expect(instance.success?(headings, lexeme, [])).to be_falsey
|
56
|
+
# end
|
57
|
+
end # context
|
58
|
+
end # describe
|
59
|
+
end # module
|
60
|
+
end # module
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../lib/zenlish/wclasses/common_noun'
|
4
|
+
require_relative '../../../lib/zenlish/lex/lexeme'
|
5
|
+
require_relative '../../../lib/zenlish/lex/lexical_entry'
|
6
|
+
require_relative '../../../lib/zenlish/inflect/feature_heading'
|
7
|
+
require_relative '../../../lib/zenlish/inflect/formal_argument'
|
8
|
+
# Load the class under test
|
9
|
+
require_relative '../../../lib/zenlish/inflect/not_equals_literal'
|
10
|
+
|
11
|
+
module Zenlish
|
12
|
+
module Inflect
|
13
|
+
describe NotEqualsLiteral do
|
14
|
+
let(:an_argument) { FormalArgument.new(1) }
|
15
|
+
let(:feat_val) { :plural }
|
16
|
+
subject { NotEqualsLiteral.new(an_argument, feat_val) }
|
17
|
+
|
18
|
+
context 'Initialization:' do
|
19
|
+
it 'should be initialized with formal argument and a literal' do
|
20
|
+
expect { NotEqualsLiteral.new(an_argument, feat_val) }.not_to raise_error
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should know its argument' do
|
24
|
+
expect(subject.argument).to eq(an_argument)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should know the literal' do
|
28
|
+
expect(subject.literal).to eq(feat_val)
|
29
|
+
end
|
30
|
+
end # context
|
31
|
+
|
32
|
+
context 'Provided services:' do
|
33
|
+
it 'should test the actual argument' do
|
34
|
+
lexeme = double('dummy-lexeme')
|
35
|
+
headings = double('fake-headings')
|
36
|
+
actual_args = [nil, :plural, nil]
|
37
|
+
expect(subject.success?(headings, lexeme, actual_args)).to be_falsy
|
38
|
+
actual_args[1] = :singular
|
39
|
+
expect(subject.success?(headings, lexeme, actual_args)).to be_truthy
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should test the lexeme' do
|
43
|
+
c_noun = WClasses::CommonNoun.new
|
44
|
+
entry = Lex::LexicalEntry.new('animal')
|
45
|
+
lexeme = Lex::Lexeme.new(c_noun, entry)
|
46
|
+
headings = [nil, FeatureHeading.new('NUMBER'), nil]
|
47
|
+
expect(subject.success?(headings, lexeme, [])).to be_falsy
|
48
|
+
|
49
|
+
instance = NotEqualsLiteral.new(an_argument, :singular)
|
50
|
+
expect(instance.success?(headings, lexeme, [])).to be_falsy
|
51
|
+
|
52
|
+
instance = NotEqualsLiteral.new(an_argument, :irregular)
|
53
|
+
expect(instance.success?(headings, lexeme, [])).to be_truthy
|
54
|
+
end
|
55
|
+
end # context
|
56
|
+
end # describe
|
57
|
+
end # module
|
58
|
+
end # module
|
@@ -47,6 +47,10 @@ module Zenlish
|
|
47
47
|
instance = Lexeme.new(a_wclass, an_entry, a_feat_struct_def)
|
48
48
|
expect(instance['NUMBER'].default.val).to eq(:plural)
|
49
49
|
end
|
50
|
+
|
51
|
+
it 'should know its inflection paradigm' do
|
52
|
+
expect(subject.paradigm).to be_kind_of(Inflect::InflectionTable)
|
53
|
+
end
|
50
54
|
end # context
|
51
55
|
end # describe
|
52
56
|
end # module
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../spec_helper' # Use the RSpec framework
|
4
|
+
|
5
|
+
# Load the class under test
|
6
|
+
require_relative '../../../lib/zenlish/wclasses/lexical_verb'
|
7
|
+
|
8
|
+
module Zenlish
|
9
|
+
module WClasses
|
10
|
+
describe LexicalVerb do
|
11
|
+
subject { LexicalVerb.new }
|
12
|
+
|
13
|
+
context 'Initialization:' do
|
14
|
+
it 'should be initialized without argument' do
|
15
|
+
expect { LexicalVerb.new }.not_to raise_error
|
16
|
+
end
|
17
|
+
end # context
|
18
|
+
|
19
|
+
context 'Provided services:' do
|
20
|
+
it 'should know its inherited feature definitions' do
|
21
|
+
expect(subject['NUMBER']).to be_kind_of(Feature::FeatureDef)
|
22
|
+
expect(subject['PERSON']).to be_kind_of(Feature::FeatureDef)
|
23
|
+
expect(subject['PARADIGM'].default.val).to eq('Regular_inflection')
|
24
|
+
end
|
25
|
+
end # context
|
26
|
+
end # describe
|
27
|
+
end # module
|
28
|
+
end # module
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../spec_helper' # Use the RSpec framework
|
4
|
+
require_relative '../../../lib/zenlish/lex/lexical_entry'
|
5
|
+
require_relative '../../../lib/zenlish/lex/lexeme'
|
6
|
+
|
7
|
+
# Load the class under test
|
8
|
+
require_relative '../../../lib/zenlish/wclasses/regular_verb'
|
9
|
+
|
10
|
+
module Zenlish
|
11
|
+
module WClasses
|
12
|
+
describe RegularVerb do
|
13
|
+
subject { RegularVerb.new }
|
14
|
+
|
15
|
+
context 'Initialization:' do
|
16
|
+
it 'should be initialized without argument' do
|
17
|
+
expect { RegularVerb.new }.not_to raise_error
|
18
|
+
end
|
19
|
+
end # context
|
20
|
+
|
21
|
+
context 'Provided services:' do
|
22
|
+
it 'should know its inherited feature definitions' do
|
23
|
+
expect(subject['NUMBER']).to be_kind_of(Feature::FeatureDef)
|
24
|
+
expect(subject['PERSON']).to be_kind_of(Feature::FeatureDef)
|
25
|
+
expect(subject['PARADIGM'].default.val).to eq('Regular_inflection')
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:present_1sg) { [:first, :singular, :present, nil] }
|
29
|
+
let(:present_3sg) { [:third, :singular, :present, nil] }
|
30
|
+
let(:present_1pl) { [:first, :plural, :present, nil] }
|
31
|
+
let(:progressive) { [nil, nil, :progressive, nil] }
|
32
|
+
let(:past_simple) { [nil, nil, :past_simple, nil] }
|
33
|
+
let(:past_participle) { [nil, nil, :past_participle, nil] }
|
34
|
+
|
35
|
+
def build_verb(aBaseForm)
|
36
|
+
entry = Zenlish::Lex::LexicalEntry.new(aBaseForm)
|
37
|
+
lexeme = Zenlish::Lex::Lexeme.new(subject, entry)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_inflection_of(verb_form, pairs)
|
41
|
+
verb = build_verb(verb_form)
|
42
|
+
pairs.each do |(constraints, expected_form)|
|
43
|
+
expect(verb.inflect(constraints)).to eq(expected_form)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should how to inflect regular verbs' do
|
48
|
+
expectations_1 = [
|
49
|
+
[present_1sg, 'exist'],
|
50
|
+
[present_3sg, 'exists'],
|
51
|
+
[present_1pl, 'exist'],
|
52
|
+
[progressive, 'existing'],
|
53
|
+
[past_simple, 'existed'],
|
54
|
+
[past_participle, 'existed']
|
55
|
+
]
|
56
|
+
test_inflection_of('exist', expectations_1)
|
57
|
+
|
58
|
+
expectations_2 = [
|
59
|
+
[present_1sg, 'move'],
|
60
|
+
[present_3sg, 'moves'],
|
61
|
+
[present_1pl, 'move'],
|
62
|
+
[progressive, 'moving'],
|
63
|
+
[past_simple, 'moved'],
|
64
|
+
[past_participle, 'moved']
|
65
|
+
]
|
66
|
+
test_inflection_of('move', expectations_2)
|
67
|
+
|
68
|
+
expectations_3 = [
|
69
|
+
[present_1sg, 'try'],
|
70
|
+
[present_3sg, 'tries'],
|
71
|
+
[present_1pl, 'try'],
|
72
|
+
[progressive, 'trying'],
|
73
|
+
[past_simple, 'tried'],
|
74
|
+
[past_participle, 'tried']
|
75
|
+
]
|
76
|
+
test_inflection_of('try', expectations_3)
|
77
|
+
|
78
|
+
expectations_4 = [
|
79
|
+
[present_1sg, 'touch'],
|
80
|
+
[present_3sg, 'touches'],
|
81
|
+
[present_1pl, 'touch'],
|
82
|
+
[progressive, 'touching'],
|
83
|
+
[past_simple, 'touched'],
|
84
|
+
[past_participle, 'touched']
|
85
|
+
]
|
86
|
+
test_inflection_of('touch', expectations_4)
|
87
|
+
end
|
88
|
+
end # context
|
89
|
+
end # describe
|
90
|
+
end # module
|
91
|
+
end # module
|
@@ -15,9 +15,15 @@ module Zenlish
|
|
15
15
|
end # context
|
16
16
|
|
17
17
|
context 'Provided services:' do
|
18
|
-
it 'should know that it
|
18
|
+
it 'should know that it has inflected forms' do
|
19
19
|
expect(subject).not_to be_invariable
|
20
20
|
end
|
21
|
+
|
22
|
+
it 'should know its feature definitions' do
|
23
|
+
expect(subject['NUMBER']).to be_kind_of(Feature::FeatureDef)
|
24
|
+
expect(subject['PERSON']).to be_kind_of(Feature::FeatureDef)
|
25
|
+
expect(subject['PARADIGM'].default.val).to eq('Regular_inflection')
|
26
|
+
end
|
21
27
|
end # context
|
22
28
|
end # describe
|
23
29
|
end # module
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zenlish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.01
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitri Geshef
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rley
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- lib/zenlish/inflect/equals_literal.rb
|
105
105
|
- lib/zenlish/inflect/feature_heading.rb
|
106
106
|
- lib/zenlish/inflect/formal_argument.rb
|
107
|
+
- lib/zenlish/inflect/function_call.rb
|
107
108
|
- lib/zenlish/inflect/heading.rb
|
108
109
|
- lib/zenlish/inflect/inflection_rule.rb
|
109
110
|
- lib/zenlish/inflect/inflection_table.rb
|
@@ -112,7 +113,9 @@ files:
|
|
112
113
|
- lib/zenlish/inflect/input_expression.rb
|
113
114
|
- lib/zenlish/inflect/literal_asis.rb
|
114
115
|
- lib/zenlish/inflect/matches_pattern.rb
|
116
|
+
- lib/zenlish/inflect/membership.rb
|
115
117
|
- lib/zenlish/inflect/method_heading.rb
|
118
|
+
- lib/zenlish/inflect/not_equals_literal.rb
|
116
119
|
- lib/zenlish/inflect/nullary_input_expression.rb
|
117
120
|
- lib/zenlish/inflect/output_expression.rb
|
118
121
|
- lib/zenlish/inflect/substitution.rb
|
@@ -195,13 +198,16 @@ files:
|
|
195
198
|
- spec/zenlish/inflect/equals_literal_spec.rb
|
196
199
|
- spec/zenlish/inflect/feature_heading_spec.rb
|
197
200
|
- spec/zenlish/inflect/formal_argument_spec.rb
|
201
|
+
- spec/zenlish/inflect/function_call_spec.rb
|
198
202
|
- spec/zenlish/inflect/inflection_rule_spec.rb
|
199
203
|
- spec/zenlish/inflect/inflection_table_builder_spec.rb
|
200
204
|
- spec/zenlish/inflect/inflection_table_spec.rb
|
201
205
|
- spec/zenlish/inflect/input_asis_spec.rb
|
202
206
|
- spec/zenlish/inflect/literal_asis_spec.rb
|
203
207
|
- spec/zenlish/inflect/matches_pattern_spec.rb
|
208
|
+
- spec/zenlish/inflect/membership_spec.rb
|
204
209
|
- spec/zenlish/inflect/method_heading_spec.rb
|
210
|
+
- spec/zenlish/inflect/not_equals_literal_spec.rb
|
205
211
|
- spec/zenlish/inflect/substitution_spec.rb
|
206
212
|
- spec/zenlish/inflect/unconditionally_true_spec.rb
|
207
213
|
- spec/zenlish/lang/dictionary_spec.rb
|
@@ -219,9 +225,11 @@ files:
|
|
219
225
|
- spec/zenlish/support/var2word.rb
|
220
226
|
- spec/zenlish/wclasses/common_noun_spec.rb
|
221
227
|
- spec/zenlish/wclasses/irregular_verb_spec.rb
|
228
|
+
- spec/zenlish/wclasses/lexical_verb_spec.rb
|
222
229
|
- spec/zenlish/wclasses/noun_spec.rb
|
223
230
|
- spec/zenlish/wclasses/preposition_spec.rb
|
224
231
|
- spec/zenlish/wclasses/proper_noun_spec.rb
|
232
|
+
- spec/zenlish/wclasses/regular_verb_spec.rb
|
225
233
|
- spec/zenlish/wclasses/verb_spec.rb
|
226
234
|
- spec/zenlish_spec.rb
|
227
235
|
- zenlish.gemspec
|
@@ -264,13 +272,16 @@ test_files:
|
|
264
272
|
- spec/zenlish/inflect/equals_literal_spec.rb
|
265
273
|
- spec/zenlish/inflect/feature_heading_spec.rb
|
266
274
|
- spec/zenlish/inflect/formal_argument_spec.rb
|
275
|
+
- spec/zenlish/inflect/function_call_spec.rb
|
267
276
|
- spec/zenlish/inflect/inflection_rule_spec.rb
|
268
277
|
- spec/zenlish/inflect/inflection_table_builder_spec.rb
|
269
278
|
- spec/zenlish/inflect/inflection_table_spec.rb
|
270
279
|
- spec/zenlish/inflect/input_asis_spec.rb
|
271
280
|
- spec/zenlish/inflect/literal_asis_spec.rb
|
272
281
|
- spec/zenlish/inflect/matches_pattern_spec.rb
|
282
|
+
- spec/zenlish/inflect/membership_spec.rb
|
273
283
|
- spec/zenlish/inflect/method_heading_spec.rb
|
284
|
+
- spec/zenlish/inflect/not_equals_literal_spec.rb
|
274
285
|
- spec/zenlish/inflect/substitution_spec.rb
|
275
286
|
- spec/zenlish/inflect/unconditionally_true_spec.rb
|
276
287
|
- spec/zenlish/lang/dictionary_spec.rb
|
@@ -286,8 +297,10 @@ test_files:
|
|
286
297
|
- spec/zenlish/parser/zparser_spec.rb
|
287
298
|
- spec/zenlish/wclasses/common_noun_spec.rb
|
288
299
|
- spec/zenlish/wclasses/irregular_verb_spec.rb
|
300
|
+
- spec/zenlish/wclasses/lexical_verb_spec.rb
|
289
301
|
- spec/zenlish/wclasses/noun_spec.rb
|
290
302
|
- spec/zenlish/wclasses/preposition_spec.rb
|
291
303
|
- spec/zenlish/wclasses/proper_noun_spec.rb
|
304
|
+
- spec/zenlish/wclasses/regular_verb_spec.rb
|
292
305
|
- spec/zenlish/wclasses/verb_spec.rb
|
293
306
|
- spec/zenlish_spec.rb
|