rley 0.6.01 → 0.6.02

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -1
  3. data/examples/NLP/engtagger.rb +58 -60
  4. data/lib/rley/constants.rb +1 -1
  5. metadata +2 -33
  6. data/examples/general/SRL/lib/ast_builder.rb +0 -382
  7. data/examples/general/SRL/lib/grammar.rb +0 -106
  8. data/examples/general/SRL/lib/regex/abstract_method.rb +0 -35
  9. data/examples/general/SRL/lib/regex/alternation.rb +0 -27
  10. data/examples/general/SRL/lib/regex/anchor.rb +0 -45
  11. data/examples/general/SRL/lib/regex/atomic_expression.rb +0 -16
  12. data/examples/general/SRL/lib/regex/capturing_group.rb +0 -51
  13. data/examples/general/SRL/lib/regex/char_class.rb +0 -38
  14. data/examples/general/SRL/lib/regex/char_range.rb +0 -51
  15. data/examples/general/SRL/lib/regex/char_shorthand.rb +0 -50
  16. data/examples/general/SRL/lib/regex/character.rb +0 -204
  17. data/examples/general/SRL/lib/regex/compound_expression.rb +0 -57
  18. data/examples/general/SRL/lib/regex/concatenation.rb +0 -29
  19. data/examples/general/SRL/lib/regex/expression.rb +0 -60
  20. data/examples/general/SRL/lib/regex/lookaround.rb +0 -50
  21. data/examples/general/SRL/lib/regex/match_option.rb +0 -34
  22. data/examples/general/SRL/lib/regex/monadic_expression.rb +0 -28
  23. data/examples/general/SRL/lib/regex/multiplicity.rb +0 -91
  24. data/examples/general/SRL/lib/regex/non_capturing_group.rb +0 -27
  25. data/examples/general/SRL/lib/regex/polyadic_expression.rb +0 -60
  26. data/examples/general/SRL/lib/regex/quantifiable.rb +0 -22
  27. data/examples/general/SRL/lib/regex/repetition.rb +0 -29
  28. data/examples/general/SRL/lib/regex/wildcard.rb +0 -23
  29. data/examples/general/SRL/lib/regex_repr.rb +0 -13
  30. data/examples/general/SRL/lib/tokenizer.rb +0 -147
  31. data/examples/general/SRL/spec/integration_spec.rb +0 -448
  32. data/examples/general/SRL/spec/regex/character_spec.rb +0 -166
  33. data/examples/general/SRL/spec/regex/multiplicity_spec.rb +0 -79
  34. data/examples/general/SRL/spec/spec_helper.rb +0 -25
  35. data/examples/general/SRL/spec/tokenizer_spec.rb +0 -148
  36. data/examples/general/SRL/srl_demo.rb +0 -75
@@ -1,57 +0,0 @@
1
- # File: compound_expression.rb
2
-
3
- require_relative 'expression' # Access the superclass
4
-
5
- module Regex # This module is used as a namespace
6
- # Abstract class. An element that is part of a regular expression &
7
- # that has its own child sub-expressions.
8
- class CompoundExpression < Expression
9
- # Redefined method. Return false since it may have one or more children.
10
- def atomic?
11
- return false
12
- end
13
-
14
- =begin
15
- # Build a depth-first in-order children visitor.
16
- # The visitor is implemented as an Enumerator.
17
- def df_visitor()
18
- root = children # The visit will start from the children of this object
19
-
20
- visitor = Enumerator.new do |result| # result is a Yielder
21
- # Initialization part: will run once
22
- visit_stack = [ root ] # The LIFO queue of nodes to visit
23
-
24
- begin # Traversal part (as a loop)
25
- top = visit_stack.pop()
26
- if top.kind_of?(Array)
27
- if top.empty?
28
- next
29
- else
30
- currChild = top.pop()
31
- visit_stack.push top
32
- end
33
- else
34
- currChild = top
35
- end
36
-
37
- result << currChild # Return the visited child
38
-
39
- unless currChild.atomic?
40
- children_to_enqueue = currChild.children.reverse() # in-order traversal implies LIFO queue
41
- visit_stack.push(children_to_enqueue)
42
- end
43
- end until visit_stack.empty?
44
- end
45
- end
46
- =end
47
-
48
- protected
49
-
50
- # Abstract method. Return the text representation of the child (if any)
51
- def all_child_text()
52
- abstract_method
53
- end
54
- end # class
55
- end # module
56
-
57
- # End of file
@@ -1,29 +0,0 @@
1
- # File: concatenation.rb
2
-
3
- require_relative 'polyadic_expression' # Access the superclass
4
-
5
- module Regex # This module is used as a namespace
6
- # Abstract class. A n-ary matching operator.
7
- # It succeeds when each child succeeds to match the subject text in the same
8
- # serial arrangement than defined by this concatenation.
9
- class Concatenation < PolyadicExpression
10
- # Constructor.
11
- def initialize(*theChildren)
12
- super(theChildren)
13
- end
14
-
15
- protected
16
-
17
- # Conversion method re-definition.
18
- # Purpose: Return the String representation of the concatented expressions.
19
- def text_repr()
20
- outcome = children.inject('') do |result, aChild|
21
- result << aChild.to_str
22
- end
23
-
24
- return outcome
25
- end
26
- end # class
27
- end # module
28
-
29
- # End of file
@@ -1,60 +0,0 @@
1
- # File: expression.rb
2
-
3
- require_relative 'abstract_method'
4
-
5
- module Regex # This module is used as a namespace
6
- # Abstract class. The generalization of any valid regular (sub)expression.
7
- class Expression
8
- attr_accessor :begin_anchor
9
- attr_accessor :end_anchor
10
-
11
- # Constructor
12
- def initialize(); end
13
-
14
- # Abstract method. Return true iff the expression is atomic
15
- # (= may not have any child).
16
- def atomic?()
17
- abstract_method
18
- end
19
-
20
- # Abstract method. Return the number of values that match this expression.
21
- # [_parent_options] an Hash of matching options. They are overridden
22
- # by options with same name that are bound to this object.
23
- def cardinality(_parent_options)
24
- abstract_method
25
- end
26
-
27
- # Determine the matching options to apply to this object, given the options
28
- # coming from the parent
29
- # and options that are local to this object. Local options take precedence.
30
- # @param theParentOptions [Hash] matching options. They are overridden
31
- # by options with same name that are bound to this object.
32
- def options(theParentOptions)
33
- resulting_options = theParentOptions.merge(@local_options)
34
- return resulting_options
35
- end
36
-
37
- # Template method.
38
- # Purpose: Return the String representation of the expression.
39
- def to_str()
40
- result = ''
41
- result << prefix
42
- result << text_repr
43
- result << suffix
44
-
45
- return result
46
- end
47
-
48
- protected
49
-
50
- def prefix()
51
- begin_anchor ? begin_anchor.to_str : ''
52
- end
53
-
54
- def suffix()
55
- end_anchor ? end_anchor.to_str : ''
56
- end
57
- end # class
58
- end # module
59
-
60
- # End of file
@@ -1,50 +0,0 @@
1
- # File: Lookaround.rb
2
-
3
- ########################
4
- # TODO: make it a binary expression
5
- ########################
6
-
7
-
8
- require_relative 'polyadic_expression' # Access the superclass
9
-
10
- module Regex # This module is used as a namespace
11
- # Lookaround is a zero-width assertion just like the start and end of line
12
- # anchors.
13
- # The difference is that lookarounds will actually match characters, but only
14
- # return the result of the match: match or no match.
15
- # That is why they are called "assertions". They do not consume characters
16
- # from the subject, but only assert whether a match is possible or not.
17
- class Lookaround < PolyadicExpression
18
- # The "direction" of the lookaround. Can be ahead or behind. It specifies
19
- # the relative position of the expression to match compared to
20
- # the current 'position' in the subject text.
21
- attr_reader(:dir)
22
-
23
- # The kind indicates whether the assertion is positive
24
- # (succeeds when there is a match) or negative
25
- # (assertion succeeds when there is NO match).
26
- attr_reader(:kind)
27
-
28
- # Constructor.
29
- # [assertedExpression] A sub-expression to match.
30
- # [theDir] One of the following values: [ :ahead, :behind ]
31
- # [theKind] One of the following values: [ :positive, :negative ]
32
- def initialize(assertedExpression, theDir, theKind)
33
- super([assertedExpression])
34
- @dir = theDir
35
- @kind = theKind
36
- end
37
-
38
- # Conversion method re-definition.
39
- # Purpose: Return the String representation of the captured expression.
40
- def to_str()
41
- result = children[0].to_str
42
- dir_syntax = (dir == :ahead) ? '' : '<'
43
- kind_syntax = (kind == :positive) ? '=' : '!'
44
- result << '(?' + dir_syntax + kind_syntax + children[1].to_str + ')'
45
- return result
46
- end
47
- end # class
48
- end # module
49
-
50
- # End of file
@@ -1,34 +0,0 @@
1
- # File: MatchOption.rb
2
-
3
- module Regex # This module is used as a namespace
4
- # Represents an option that influences the way a regular (sub)expression
5
- # can perform its matching.
6
- class MatchOption
7
- # The symbolic name of the option
8
- attr_reader(:name)
9
-
10
- # An indicator that tells whether the option is turned on or off
11
- attr_reader(:setting)
12
-
13
- # Constructor.
14
- def initialize(theName, theSetting)
15
- @name = theName
16
- @setting = theSetting
17
- end
18
-
19
- # Equality operator
20
- def ==(other)
21
- return true if object_id == other.object_id
22
-
23
- if other.kind_of?(MatchOption)
24
- isEqual = ((name == other.name) && (setting == other.setting))
25
- else
26
- isEqual = false
27
- end
28
-
29
- return isEqual
30
- end
31
- end # class
32
- end # module
33
-
34
- # End of file
@@ -1,28 +0,0 @@
1
- # File: monadic_expression.rb
2
-
3
- require_relative 'compound_expression' # Access the superclass
4
-
5
- module Regex # This module is used as a namespace
6
- # Abstract class. An element that is part of a regular expression &
7
- # that can have up to one child sub-expression.
8
- class MonadicExpression < CompoundExpression
9
- # The (optional) child sub-expression
10
- attr_reader(:child)
11
-
12
- # Constructor.
13
- def initialize(theChild)
14
- super()
15
- @child = theChild
16
- end
17
-
18
- protected
19
-
20
- # Return the text representation of the child (if any)
21
- def all_child_text()
22
- result = child.nil? ? '' : child.to_str
23
-
24
- return result
25
- end
26
- end # class
27
- end # module
28
- # End of file
@@ -1,91 +0,0 @@
1
- # File: Multiplicity.rb
2
-
3
- module SRL
4
- module Regex # This module is used as a namespace
5
- # The multiplicity specifies by how much a given expression can be repeated.
6
- class Multiplicity
7
- # The lowest acceptable repetition count
8
- attr_reader(:lower_bound)
9
-
10
- # The highest possible repetition count
11
- attr_reader(:upper_bound)
12
-
13
- # An indicator that specifies how to repeat (:greedy, :lazy, :possessive)
14
- attr_reader(:policy)
15
-
16
- # @param aLowerBound [Integer]
17
- # @param anUpperBound [Integer, Symbol] integer or :more symbol
18
- # @param aPolicy [Symbol] One of: (:greedy, :lazy, :possessive)
19
- def initialize(aLowerBound, anUpperBound, aPolicy)
20
- @lower_bound = valid_lower_bound(aLowerBound)
21
- @upper_bound = valid_upper_bound(anUpperBound)
22
- @policy = valid_policy(aPolicy)
23
- end
24
-
25
- # Purpose: Return the String representation of the multiplicity.
26
- def to_str()
27
- case upper_bound
28
- when :more
29
- case lower_bound
30
- when 0
31
- subresult = '*'
32
- when 1
33
- subresult = '+'
34
- else
35
- subresult = "{#{lower_bound},}"
36
- end
37
-
38
- when lower_bound
39
- subresult = "{#{lower_bound}}"
40
- else
41
- if [lower_bound, upper_bound] == [0, 1]
42
- subresult = '?'
43
- else
44
- subresult = "{#{lower_bound},#{upper_bound}}"
45
- end
46
- end
47
-
48
- suffix = case policy
49
- when :greedy
50
- ''
51
- when :lazy
52
- '?'
53
- when :possessive
54
- '+'
55
- end
56
-
57
- return subresult + suffix
58
- end
59
-
60
- private
61
-
62
- # Validation method. Return the validated lower bound value
63
- def valid_lower_bound(aLowerBound)
64
- err_msg = "Invalid lower bound of repetition count #{aLowerBound}"
65
- raise StandardError, err_msg unless aLowerBound.kind_of?(Integer)
66
- return aLowerBound
67
- end
68
-
69
- # Validation method. Return the validated lower bound value
70
- def valid_upper_bound(anUpperBound)
71
- err_msg = "Invalid upper bound of repetition count #{anUpperBound}"
72
- unless anUpperBound.kind_of?(Integer) || (anUpperBound == :more)
73
- raise StandardError, err_msg
74
- end
75
-
76
- return anUpperBound
77
- end
78
-
79
- # Validation method. Return the validated policy value.
80
- def valid_policy(aPolicy)
81
- err_msg = "Invalid repetition policy '#{aPolicy}'."
82
- valid_policies = %i[greedy lazy possessive]
83
- raise StandardError, err_msg unless valid_policies.include? aPolicy
84
-
85
- return aPolicy
86
- end
87
- end # class
88
- end # module
89
- end # module
90
-
91
- # End of file
@@ -1,27 +0,0 @@
1
- # File: non_capturing_group.rb
2
-
3
- require_relative 'monadic_expression' # Access the superclass
4
-
5
- module Regex # This module is used as a namespace
6
- # A non-capturing group, in other word it is a pure grouping
7
- # of sub-expressions
8
- class NonCapturingGroup < MonadicExpression
9
- # Constructor.
10
- # [aChildExpression] A sub-expression to match. When successful
11
- # the matching text is assigned to the capture variable.
12
- def initialize(aChildExpression)
13
- super(aChildExpression)
14
- end
15
-
16
- protected
17
-
18
- # Conversion method re-definition.
19
- # Purpose: Return the String representation of the captured expression.
20
- def text_repr()
21
- result = '(?:' + all_child_text + ')'
22
- return result
23
- end
24
- end # class
25
- end # module
26
-
27
- # End of file
@@ -1,60 +0,0 @@
1
- # File: polyadic_expression.rb
2
-
3
- require_relative 'compound_expression' # Access the superclass
4
-
5
- module Regex # This module is used as a namespace
6
- # Abstract class. An element that is part of a regular expression &
7
- # that has its own child sub-expressions.
8
- class PolyadicExpression < CompoundExpression
9
- # The aggregation of child elements
10
- attr_reader(:children)
11
-
12
- # Constructor.
13
- def initialize(theChildren)
14
- super()
15
- @children = theChildren
16
- end
17
-
18
- # Append the given child to the list of children.
19
- # TODO: assess whether to defer to a subclass NAryExpression
20
- def <<(aChild)
21
- @children << aChild
22
-
23
- return self
24
- end
25
-
26
- # Build a depth-first in-order children visitor.
27
- # The visitor is implemented as an Enumerator.
28
- def df_visitor()
29
- root = children # The visit will start from the children of this object
30
-
31
- visitor = Enumerator.new do |result| # result is a Yielder
32
- # Initialization part: will run once
33
- visit_stack = [root] # The LIFO queue of nodes to visit
34
-
35
- begin # Traversal part (as a loop)
36
- top = visit_stack.pop
37
- if top.kind_of?(Array)
38
- next if top.empty?
39
- currChild = top.pop
40
- visit_stack.push top
41
- else
42
- currChild = top
43
- end
44
-
45
- result << currChild # Return the visited child
46
-
47
- unless currChild.atomic?
48
- # in-order traversal implies LIFO queue
49
- children_to_enqueue = currChild.children.reverse
50
- visit_stack.push(children_to_enqueue)
51
- end
52
- end until visit_stack.empty?
53
- end
54
-
55
- return visitor
56
- end
57
- end # class
58
- end # module
59
-
60
- # End of file