calyx 0.11.1 → 0.11.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75811b39e9ca016645eb82dea083ff50612f8e2b
4
- data.tar.gz: af905efd81c6b0e679e2ed333f571fdad65ee8a8
3
+ metadata.gz: dc594e0fddc6c14df3cd938cc1ab458f7ffc490f
4
+ data.tar.gz: 68f4c73ef62ae94daea3194b11d3c7e0e5df7904
5
5
  SHA512:
6
- metadata.gz: 97a47ba2a0dcf0d658641ba1f67b3237731132ca0500c92053b86f54a60b2eba7f3181daef54c43f94d40c725915c39a2ae2898d6a639a0399f3910a4d01116f
7
- data.tar.gz: 57341f9c8428917d56b33dedd219dd904bca3252b9f2a7d240bcab1a050f8209f7b61ab26d9402b69f029be53d7ffcfcd29b8342777e2de62733e408607af872
6
+ metadata.gz: c9e136e726881b1847690a290565125546fd7a41f90f7bbd4320542eaee82be2df9796acbf11d53cb71c77d2b82e97e29d228f050ac765d688bc36ac1c672a75
7
+ data.tar.gz: 9290522a14840247671d1c76228b0e515687b97713890e4b303fe10f128cf1e7c7d5b061775dd060534ad67e7e98143b398ae9ab5cba74289c25bab8c4adebfd
data/README.md CHANGED
@@ -417,7 +417,8 @@ Rough plan for stabilising the API and features for a `1.0` release.
417
417
  | `0.9` | ~~return grammar tree from `#evaluate`, with flattened string from `#generate` being separate~~ |
418
418
  | `0.10` | ~~inject custom string functions for parameterised rules, transforms and mappings~~ |
419
419
  | `0.11` | ~~support YAML format (and JSON?)~~ |
420
- | `1.0` | API documentation |
420
+ | `0.12` | indirection (allow output of a rule to be used as the name for another rule) |
421
+ | `1.0` | ~~API documentation~~ |
421
422
 
422
423
  ## Credits
423
424
 
@@ -7,7 +7,7 @@ module Calyx
7
7
  # Accepts a JSON or YAML file path, identified by its extension (`.json`
8
8
  # or `.yml`).
9
9
  #
10
- # @param filename [String]
10
+ # @param [String] filename
11
11
  # @return [Calyx::Grammar]
12
12
  def self.load(filename)
13
13
  file = File.read(filename)
@@ -23,7 +23,7 @@ module Calyx
23
23
 
24
24
  # Converts the given string of YAML data to a grammar instance.
25
25
  #
26
- # @param data [String]
26
+ # @param [String] data
27
27
  # @return [Calyx::Grammar]
28
28
  def self.load_yml(data)
29
29
  require 'yaml'
@@ -32,7 +32,7 @@ module Calyx
32
32
 
33
33
  # Converts the given string of JSON data to a grammar instance.
34
34
  #
35
- # @param data [String]
35
+ # @param [String] data
36
36
  # @return [Calyx::Grammar]
37
37
  def self.load_json(data)
38
38
  require 'json'
@@ -23,7 +23,7 @@ module Calyx
23
23
  # Accepts a JSON or YAML file path, identified by its extension (`.json`
24
24
  # or `.yml`).
25
25
  #
26
- # @param filename [String]
26
+ # @param [String] filename
27
27
  # @return [Calyx::Grammar]
28
28
  def load(filename)
29
29
  Format.load(filename)
@@ -31,22 +31,22 @@ module Calyx
31
31
 
32
32
  # DSL helper method for registering a modifier module with the grammar.
33
33
  #
34
- # @param module_name [Module]
34
+ # @param [Module] module_name
35
35
  def modifier(module_name)
36
36
  registry.modifier(module_name)
37
37
  end
38
38
 
39
39
  # DSL helper method for registering a paired mapping regex.
40
40
  #
41
- # @param name [Symbol]
42
- # @param pairs [Hash<Regex,String>]
41
+ # @param [Symbol] name
42
+ # @param [Hash<Regex,String>] pairs
43
43
  def mapping(name, pairs)
44
44
  registry.mapping(name, pairs)
45
45
  end
46
46
 
47
47
  # DSL helper method for registering the given block as a string filter.
48
48
  #
49
- # @param name [Symbol]
49
+ # @param [Symbol] name
50
50
  # @block block with a single string argument returning a modified string.
51
51
  def filter(name, &block)
52
52
  registry.mapping(name, &block)
@@ -56,8 +56,8 @@ module Calyx
56
56
  #
57
57
  # Not usually used directly, as the method missing API is less verbose.
58
58
  #
59
- # @param name [Symbol]
60
- # @param productions [Array]
59
+ # @param [Symbol] name
60
+ # @param [Array] productions
61
61
  def rule(name, *productions)
62
62
  registry.rule(name, *productions)
63
63
  end
@@ -68,8 +68,8 @@ module Calyx
68
68
  # This must be bypassed by calling `#rule` directly if the name of the
69
69
  # desired rule clashes with an existing helper method.
70
70
  #
71
- # @param name [Symbol]
72
- # @param productions [Array]
71
+ # @param [Symbol] name
72
+ # @param [Array] productions
73
73
  def method_missing(name, *productions)
74
74
  registry.rule(name, *productions)
75
75
  end
@@ -77,7 +77,7 @@ module Calyx
77
77
  # Hook for combining the registry of a parent grammar into the child that
78
78
  # inherits from it.
79
79
  #
80
- # @param child_registry [Calyx::Registry]
80
+ # @param [Calyx::Registry] child_registry
81
81
  def inherit_registry(child_registry)
82
82
  registry.combine(child_registry) unless child_registry.nil?
83
83
  end
@@ -87,7 +87,7 @@ module Calyx
87
87
  #
88
88
  # This is automatically called by the Ruby engine.
89
89
  #
90
- # @param subclass [Class]
90
+ # @param [Class] subclass
91
91
  def inherited(subclass)
92
92
  subclass.inherit_registry(registry)
93
93
  end
@@ -98,7 +98,7 @@ module Calyx
98
98
  # Grammar rules can be constructed on the fly when the passed-in block is
99
99
  # evaluated.
100
100
  #
101
- # @param seed [Number]
101
+ # @param [Number] seed
102
102
  def initialize(seed=nil, &block)
103
103
  @seed = seed || Random.new_seed
104
104
  srand(@seed)
@@ -113,8 +113,9 @@ module Calyx
113
113
 
114
114
  # Produces a string as an output of the grammar.
115
115
  #
116
- # @param start_symbol [Symbol]
117
- # @param rules_map [Hash]
116
+ # @overload
117
+ # @param [Symbol] start_symbol
118
+ # @param [Hash] rules_map
118
119
  # @return [String]
119
120
  def generate(*args)
120
121
  start_symbol, rules_map = map_default_args(*args)
@@ -126,8 +127,9 @@ module Calyx
126
127
 
127
128
  # Produces a syntax tree of nested list nodes as an output of the grammar.
128
129
  #
129
- # @param start_symbol [Symbol]
130
- # @param rules_map [Hash]
130
+ # @overload
131
+ # @param [Symbol] start_symbol
132
+ # @param [Hash] rules_map
131
133
  # @return [Array]
132
134
  def evaluate(*args)
133
135
  start_symbol, rules_map = map_default_args(*args)
@@ -8,8 +8,8 @@ module Calyx
8
8
  #
9
9
  # If an invalid modifier function is given, returns the raw input string.
10
10
  #
11
- # @param name [Symbol]
12
- # @param value [String]
11
+ # @param [Symbol] name
12
+ # @param [String] value
13
13
  # @return [String]
14
14
  def transform(name, value)
15
15
  if respond_to?(name)
@@ -6,8 +6,8 @@ module Calyx
6
6
  # Parse a list of productions and return a choice node which is the head
7
7
  # of a syntax tree of child nodes.
8
8
  #
9
- # @param productions [Array]
10
- # @param registry [Calyx::Registry]
9
+ # @param [Array] productions
10
+ # @param [Calyx::Registry] registry
11
11
  def self.parse(productions, registry)
12
12
  choices = productions.map do |choice|
13
13
  if choice.is_a?(String)
@@ -27,7 +27,7 @@ module Calyx
27
27
 
28
28
  # Initialize a new choice with a list of child nodes.
29
29
  #
30
- # @param collection [Array]
30
+ # @param [Array] collection
31
31
  def initialize(collection)
32
32
  @collection = collection
33
33
  end
@@ -13,8 +13,8 @@ module Calyx
13
13
  #
14
14
  # Returns a concat node which is the head of a tree of child nodes.
15
15
  #
16
- # @param production [String]
17
- # @param registry [Calyx::Registry]
16
+ # @param [String] production
17
+ # @param [Calyx::Registry] registry
18
18
  def self.parse(production, registry)
19
19
  expansion = production.split(EXPRESSION).map do |atom|
20
20
  if atom.is_a?(String)
@@ -42,7 +42,7 @@ module Calyx
42
42
  # Initialize the concat node with an expansion of terminal and
43
43
  # non-terminal fragments.
44
44
  #
45
- # @param expansion [Array]
45
+ # @param [Array] expansion
46
46
  def initialize(expansion)
47
47
  @expansion = expansion
48
48
  end
@@ -4,9 +4,9 @@ module Calyx
4
4
  class Expression
5
5
  # Constructs a node representing a single template substitution.
6
6
  #
7
- # @param production [#evaluate]
8
- # @param methods [Array]
9
- # @param registry [Calyx::Registry]
7
+ # @param [#evaluate] production
8
+ # @param [Array] methods
9
+ # @param [Calyx::Registry] registry
10
10
  def initialize(production, methods, registry)
11
11
  @production = production
12
12
  @methods = methods.map { |m| m.to_sym }
@@ -8,8 +8,8 @@ module Calyx
8
8
  # Construct a memoized rule, given the symbol to lookup and the registry
9
9
  # to look it up in.
10
10
  #
11
- # @param symbol [Symbol]
12
- # @param registry [Calyx::Registry]
11
+ # @param [Symbol] symbol
12
+ # @param [Calyx::Registry] registry
13
13
  def initialize(symbol, registry)
14
14
  @symbol = symbol.slice(1, symbol.length-1).to_sym
15
15
  @registry = registry
@@ -6,8 +6,8 @@ module Calyx
6
6
  # Construct a non-terminal node, given the symbol to lookup and the
7
7
  # registry to look it up in.
8
8
  #
9
- # @param symbol [Symbol]
10
- # @param registry [Calyx::Registry]
9
+ # @param [Symbol] symbol
10
+ # @param [Calyx::Registry] registry
11
11
  def initialize(symbol, registry)
12
12
  @symbol = symbol.to_sym
13
13
  @registry = registry
@@ -4,7 +4,7 @@ module Calyx
4
4
  class Terminal
5
5
  # Construct a terminal node with the given value.
6
6
  #
7
- # @param atom [#to_s]
7
+ # @param [#to_s] atom
8
8
  def initialize(atom)
9
9
  @atom = atom
10
10
  end
@@ -7,8 +7,8 @@ module Calyx
7
7
  # Parse a given list or hash of productions into a syntax tree of weighted
8
8
  # choices.
9
9
  #
10
- # @param productions [Array<Array>, Hash<#to_s, Float>]
11
- # @param registry [Calyx::Registry]
10
+ # @param [Array<Array>, Hash<#to_s, Float>] productions
11
+ # @param [Calyx::Registry] registry
12
12
  def self.parse(productions, registry)
13
13
  weights_sum = productions.reduce(0) do |memo, choice|
14
14
  memo += choice.last
@@ -29,7 +29,7 @@ module Calyx
29
29
 
30
30
  # Initialize a new choice with a list of child nodes.
31
31
  #
32
- # @param collection [Array]
32
+ # @param [Array] collection
33
33
  def initialize(collection)
34
34
  @collection = collection
35
35
  end
@@ -12,30 +12,30 @@ module Calyx
12
12
 
13
13
  # Hook for defining rules without explicitly calling the `#rule` method.
14
14
  #
15
- # @param name [Symbol]
16
- # @param productions [Array]
15
+ # @param [Symbol] name
16
+ # @param [Array] productions
17
17
  def method_missing(name, *arguments)
18
18
  rule(name, *arguments)
19
19
  end
20
20
 
21
21
  # Attaches a modifier module to this instance.
22
22
  #
23
- # @param module_name [Module]
23
+ # @param [Module] module_name
24
24
  def modifier(name)
25
25
  modifiers.extend(name)
26
26
  end
27
27
 
28
28
  # Registers a paired mapping regex.
29
29
  #
30
- # @param name [Symbol]
31
- # @param pairs [Hash<Regex,String>]
30
+ # @param [Symbol] name
31
+ # @param [Hash<Regex,String>] pairs
32
32
  def mapping(name, pairs)
33
33
  transforms[name.to_sym] = construct_mapping(pairs)
34
34
  end
35
35
 
36
36
  # Registers the given block as a string filter.
37
37
  #
38
- # @param name [Symbol]
38
+ # @param [Symbol] name
39
39
  # @block block with a single string argument returning a modified string.
40
40
  def filter(name, callable=nil, &block)
41
41
  if block_given?
@@ -47,23 +47,23 @@ module Calyx
47
47
 
48
48
  # Registers a new grammar rule.
49
49
  #
50
- # @param name [Symbol]
51
- # @param productions [Array]
50
+ # @param [Symbol] name
51
+ # @param [Array] productions
52
52
  def rule(name, *productions)
53
53
  rules[name.to_sym] = construct_rule(productions)
54
54
  end
55
55
 
56
56
  # Expands the given rule symbol to its production.
57
57
  #
58
- # @param symbol [Symbol]
58
+ # @param [Symbol] symbol
59
59
  def expand(symbol)
60
60
  rules[symbol] || context[symbol]
61
61
  end
62
62
 
63
63
  # Applies the given modifier function to the given value to transform it.
64
64
  #
65
- # @param name [Symbol]
66
- # @param value [String]
65
+ # @param [Symbol] name
66
+ # @param [String] value
67
67
  # @return [String]
68
68
  def transform(name, value)
69
69
  if transforms.key?(name)
@@ -76,7 +76,7 @@ module Calyx
76
76
  # Expands a memoized rule symbol by evaluating it and storing the result
77
77
  # for later.
78
78
  #
79
- # @param symbol [Symbol]
79
+ # @param [Symbol] symbol
80
80
  def memoize_expansion(symbol)
81
81
  memos[symbol] ||= expand(symbol).evaluate
82
82
  end
@@ -86,7 +86,7 @@ module Calyx
86
86
  # This is only needed at compile time, so that child classes can easily
87
87
  # inherit the set of rules decared by their parent.
88
88
  #
89
- # @param registry [Calyx::Registry]
89
+ # @param [Calyx::Registry] registry
90
90
  def combine(registry)
91
91
  @rules = rules.merge(registry.rules)
92
92
  end
@@ -96,8 +96,8 @@ module Calyx
96
96
  #
97
97
  # Produces a syntax tree of nested list nodes.
98
98
  #
99
- # @param start_symbol [Symbol]
100
- # @param rules_map [Hash]
99
+ # @param [Symbol] start_symbol
100
+ # @param [Hash] rules_map
101
101
  # @return [Array]
102
102
  def evaluate(start_symbol=:start, rules_map={})
103
103
  reset_evaluation_context
@@ -135,7 +135,12 @@ module Calyx
135
135
  def construct_mapping(pairs)
136
136
  mapper = -> (input) {
137
137
  match, target = pairs.detect { |match, target| input =~ match }
138
- input.gsub(match, target)
138
+
139
+ if match && target
140
+ input.gsub(match, target)
141
+ else
142
+ input
143
+ end
139
144
  }
140
145
  end
141
146
 
@@ -1,3 +1,3 @@
1
1
  module Calyx
2
- VERSION = '0.11.1'.freeze
2
+ VERSION = '0.11.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calyx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Rickerby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-06 00:00:00.000000000 Z
11
+ date: 2016-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler