LambdaRegexp 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +20 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/Guardfile +10 -0
- data/LICENSE.txt +25 -0
- data/LambdaRegexp.gemspec +26 -0
- data/README.md +21 -0
- data/Rakefile +12 -0
- data/bin/lambdaRegexp_main.rb +57 -0
- data/lib/LambdaRegexp/lambdaRegexp.rb +87 -0
- data/lib/LambdaRegexp/version.rb +3 -0
- data/lib/LambdaRegexp.rb +16 -0
- data/spec/LambdaRegexp_spec.rb +108 -0
- metadata +156 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# File : Guardfile
|
2
|
+
|
3
|
+
# A sample Guardfile
|
4
|
+
# More info at https://github.com/guard/guard#readme
|
5
|
+
|
6
|
+
guard 'rspec' do
|
7
|
+
watch(%r{^spec/.+_spec\.rb$})
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
9
|
+
watch('spec/spec_helper.rb') { "spec" }
|
10
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Free Documentation License
|
2
|
+
Version 0.0.1, 3 December 2012
|
3
|
+
|
4
|
+
Copyright (c) 2012 mdbgalvan
|
5
|
+
|
6
|
+
Everyone is permitted to copy and distribute verbatim copies of this
|
7
|
+
license document, but changing it is not allowed.
|
8
|
+
|
9
|
+
PREAMBLE
|
10
|
+
|
11
|
+
The purpose of this License is to make a manual, textbook, or other
|
12
|
+
functional and useful document "free" in the sense of freedom: to assure
|
13
|
+
everyone the effective freedom to copy and redistribute it, with or
|
14
|
+
without modifying it, either commercially or noncommercially. Secondarily,
|
15
|
+
this License preserves for the author and publisher a way to get credit
|
16
|
+
for their work, while not being considered responsible for modifications
|
17
|
+
made by others.
|
18
|
+
|
19
|
+
We have designed this License in order to use it for manuals for free
|
20
|
+
software, because free software needs free documentation: a free program
|
21
|
+
should come with manuals providing the same freedoms that the software does.
|
22
|
+
But this License is not limited to software manuals; it can be used for
|
23
|
+
any textual work, regardless of subject matter or whether it is published
|
24
|
+
as a printed book. We recommend this License principally for works whose
|
25
|
+
purpose is instruction or reference.
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'LambdaRegexp/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "LambdaRegexp"
|
8
|
+
gem.version = LambdaRegexp::VERSION
|
9
|
+
gem.authors = ["mdbgalvan"]
|
10
|
+
gem.email = ["magomenlopark@gmail.com"]
|
11
|
+
gem.description = %q{Expresiones regulares}
|
12
|
+
gem.summary = %q{Cazador de prefijos}
|
13
|
+
gem.homepage = "https://github.com/mdbGalvan/LPP_Lab11"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_development_dependency 'rake'
|
21
|
+
gem.add_development_dependency 'rspec'
|
22
|
+
gem.add_development_dependency 'guard-rspec'
|
23
|
+
gem.add_development_dependency 'guard'
|
24
|
+
gem.add_development_dependency 'rdoc'
|
25
|
+
gem.add_development_dependency 'rb-readline'
|
26
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#Autora: María D. Batista Galván
|
2
|
+
#Fecha: Lunes 3 de Diciembre de 2012
|
3
|
+
#Asignatura: Lenguajes y Paradigmas de la Programación.
|
4
|
+
#Práctica: Laboratorio 11 : Un Lambda-Engine para las Expresiones Regulares
|
5
|
+
|
6
|
+
##Pasos
|
7
|
+
|
8
|
+
En dicha asignatura y para esta décima primera práctica se debía realizar los siguientes pasos:
|
9
|
+
|
10
|
+
Véase Práctica: Un Motor para las Expresiones Regulares en Pocas Líneas (https://dl.dropbox.com/u/14539152/LPP/LPPbook/node44.html) para una descripción detallada
|
11
|
+
Si el enlace queda obsoleto busque en el índice de los apuntes (http://http//nereida.deioc.ull.es/~lpp/perlexamples/) por las sección: "Práctica: Un Motor para las Expresiones Regulares en Pocas Líneas"
|
12
|
+
|
13
|
+
1. Use TDD con RSpec
|
14
|
+
2. Use Unit Testing
|
15
|
+
3. Use Continuous Integration (Travis)
|
16
|
+
4. Use Continuous Testing (Guard)
|
17
|
+
5. Documente su gema (véase RDOC::Markup o RDOC o YARD).
|
18
|
+
6. Véa un ejemplo ilustrativo de como debería quedar la documentación del módulo creado en module ULL::ETSII::AluXXX::LambdaRegexp
|
19
|
+
7. Cree una gema ull-etsii-aluXX-lambdaregexp
|
20
|
+
8. Publique la gema en RubyGems.org
|
21
|
+
9. Indique la URL de su repositorio en GitHub
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__) + 'lib'
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
RSpec::Core::RakeTask.new
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
desc "Run rspec with --format documentation"
|
10
|
+
task :doc do
|
11
|
+
sh "rspec -Ilib spec/*.rb --format documentation --color"
|
12
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'LambdaRegexp'
|
2
|
+
|
3
|
+
include ULL::ETSII::Alu3299::LambdaRegexp
|
4
|
+
|
5
|
+
if __FILE__ == $0
|
6
|
+
|
7
|
+
e = -('c'.re)
|
8
|
+
s = 'ccddd'
|
9
|
+
remaining = e[s]
|
10
|
+
puts "/c?/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
11
|
+
|
12
|
+
e = ~('c'.re) - -('f'.re) - +('d'.re)
|
13
|
+
s = 'ccdddf'
|
14
|
+
remaining = e[s]
|
15
|
+
puts "/c*f?d+/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
16
|
+
|
17
|
+
# Ejemplo proporcionado por el profesor
|
18
|
+
e = 'cd'.re
|
19
|
+
s = 'cde'
|
20
|
+
remaining = e[s] # 'cde' Matched. Remaining = 'e'
|
21
|
+
puts "/cd/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
22
|
+
|
23
|
+
e = 'd'.re | 'r'.re
|
24
|
+
s = 'rdddf'
|
25
|
+
remaining = e[s] # 'rdddf' Matched. Remaining = 'dddf'
|
26
|
+
puts "/d|r/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
27
|
+
|
28
|
+
e = 'c'.re - ('d'.re | 'r'.re)
|
29
|
+
s = 'crddf'
|
30
|
+
remaining = e[s] # 'crddf' Matched. Remaining = 'ddf'
|
31
|
+
puts "/c(d|r)/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
32
|
+
|
33
|
+
e = 'c'.re - +('d'.re | 'r'.re)
|
34
|
+
s = 'crddf'
|
35
|
+
remaining = e[s]
|
36
|
+
puts "/c(d|r)+/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
37
|
+
|
38
|
+
e = 'c'.re - ~('d'.re | 'r'.re)
|
39
|
+
s = 'cdrdrf'
|
40
|
+
remaining = e[s]
|
41
|
+
puts "/c(d|r)*/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
42
|
+
|
43
|
+
e = 'c'.re - ~('d'.re | 'r'.re)
|
44
|
+
s = 'cfff'
|
45
|
+
remaining = e[s]
|
46
|
+
puts "/c(d|r)*/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
47
|
+
|
48
|
+
e = 'c'.re - ~('d'.re | 'r'.re)
|
49
|
+
s = 'cdrd'
|
50
|
+
remaining = e[s]
|
51
|
+
puts "/c(d|r)*/ '#{s}' Matched. Remaining = '#{remaining}'" if remaining
|
52
|
+
|
53
|
+
e = 'c'.re - +('d'.re | 'r'.re)
|
54
|
+
s = 'cfff'
|
55
|
+
remaining = e[s] # 'cfff' didn't match. Remaining = 'false'
|
56
|
+
puts "/c(d|r)+/ '#{s}' didn't match. Remaining = '#{remaining}'" unless remaining
|
57
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# File : lambdaRegexp.rb
|
2
|
+
|
3
|
+
module ULL
|
4
|
+
module ETSII
|
5
|
+
module Alu3299
|
6
|
+
module LambdaRegexp
|
7
|
+
|
8
|
+
module_function
|
9
|
+
|
10
|
+
# | Disyunción: ó
|
11
|
+
def alt(left, right)
|
12
|
+
lambda { |x| left[x] or right[x] }
|
13
|
+
end
|
14
|
+
|
15
|
+
# Cadena
|
16
|
+
def char(c)
|
17
|
+
lambda { |x| x[0,c.length] == c and x[c.length..-1] }
|
18
|
+
end
|
19
|
+
|
20
|
+
# e : Cadena vacía
|
21
|
+
def epsilon
|
22
|
+
lambda {|x| x }
|
23
|
+
end
|
24
|
+
|
25
|
+
# + Cierre Positivo de Kleene: una o más repeticiones
|
26
|
+
def plus(r)
|
27
|
+
lambda { |x| seq(r, star(r))[x] }
|
28
|
+
end
|
29
|
+
|
30
|
+
# · Concatenación: seguido de
|
31
|
+
def seq(left, right)
|
32
|
+
lambda { |x| w = left[x] and right[w] }
|
33
|
+
end
|
34
|
+
|
35
|
+
# * Cierre Estrella de Kleene: cero o más repeticiones
|
36
|
+
def star(r)
|
37
|
+
lambda { |x| plus(r)[x] or epsilon[x] }
|
38
|
+
end
|
39
|
+
|
40
|
+
# ? : cero o una repetición
|
41
|
+
def question(r)
|
42
|
+
lambda { |x| alt(r, epsilon)[x] }
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class Proc
|
51
|
+
include ULL::ETSII::Alu3299::LambdaRegexp
|
52
|
+
|
53
|
+
# · Concatenación: seguido de
|
54
|
+
def - (r)
|
55
|
+
seq(self, r)
|
56
|
+
end
|
57
|
+
|
58
|
+
# | Disyunción: ó
|
59
|
+
def | (r)
|
60
|
+
alt(self, r)
|
61
|
+
end
|
62
|
+
|
63
|
+
# + Cierre Positivo de Kleene: una o más repeticiones
|
64
|
+
def +@
|
65
|
+
plus(self)
|
66
|
+
end
|
67
|
+
|
68
|
+
# * Cierre Estrella de Kleene: cero o más repeticiones
|
69
|
+
def ~@
|
70
|
+
star(self)
|
71
|
+
end
|
72
|
+
|
73
|
+
# ? : cero o una repetición
|
74
|
+
def -@
|
75
|
+
question(self)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
class String
|
81
|
+
include ULL::ETSII::Alu3299::LambdaRegexp
|
82
|
+
|
83
|
+
# Cadena
|
84
|
+
def re
|
85
|
+
char(self)
|
86
|
+
end
|
87
|
+
end
|
data/lib/LambdaRegexp.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'LambdaRegexp'
|
2
|
+
|
3
|
+
describe ULL::ETSII::Alu3299::LambdaRegexp do
|
4
|
+
|
5
|
+
include ULL::ETSII::Alu3299::LambdaRegexp
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
@er1 = char('c')
|
9
|
+
@er2 = char('d')
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#Metodos" do
|
13
|
+
it "Se debe invocar el metodo alt() para recoger la union de dos ER" do
|
14
|
+
e = alt(@er1, @er2)
|
15
|
+
s = 'cddde'
|
16
|
+
remaining = e[s]
|
17
|
+
remaining.should == "ddde"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "Se debe invocar el metodo char() para recoger una ER" do
|
21
|
+
e = char('cd')
|
22
|
+
s = 'cddde'
|
23
|
+
remaining = e[s]
|
24
|
+
remaining.should == "dde"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "Se debe invocar el metodo epsilon() para escoger la cadena vacia" do
|
28
|
+
e = epsilon()
|
29
|
+
s = 'cddde'
|
30
|
+
remaining = e[s]
|
31
|
+
remaining.should == "cddde"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "Se debe invocar el metodo plus() para recoger el Cierre Estrella de Kleene de una ER" do
|
35
|
+
e = plus(@er1)
|
36
|
+
s = 'cddde'
|
37
|
+
remaining = e[s]
|
38
|
+
remaining.should == "ddde"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "Se debe invocar el metodo seq() para recoger la concatenacion de dos ER" do
|
42
|
+
e = seq(@er1, @er2)
|
43
|
+
s = 'cddde'
|
44
|
+
remaining = e[s]
|
45
|
+
remaining.should == "dde"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "Se debe invocar el metodo star() para recoger el Cierre positivo de Kleene de una ER" do
|
49
|
+
e = star(@er1)
|
50
|
+
s = 'cddde'
|
51
|
+
remaining = e[s]
|
52
|
+
remaining.should == "ddde"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "Se debe invocar el metodo question() para recoger cero o una repeticion de una ER" do
|
56
|
+
e = star(@er2)
|
57
|
+
s = 'cddde'
|
58
|
+
remaining = e[s]
|
59
|
+
remaining.should == "cddde"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#Operador" do
|
64
|
+
it "Se debe invocar el metodo -(r) para recoger la concatenacion de dos ER" do
|
65
|
+
e = @er1 - @er2
|
66
|
+
s = 'cddde'
|
67
|
+
remaining = e[s]
|
68
|
+
remaining.should == "dde"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "Se debe invocar el metodo | (r) para recoger la union de dos ER" do
|
72
|
+
e = @er1 | @er2
|
73
|
+
s = 'cddde'
|
74
|
+
remaining = e[s]
|
75
|
+
remaining.should == "ddde"
|
76
|
+
end
|
77
|
+
|
78
|
+
it "Se debe invocar el metodo +@ para recoger el Cierre Estrella de Kleene de una ER" do
|
79
|
+
e = +(@er1)
|
80
|
+
s = 'cddde'
|
81
|
+
remaining = e[s]
|
82
|
+
remaining.should == "ddde"
|
83
|
+
end
|
84
|
+
|
85
|
+
it "Se debe invocar el metodo ~@ para recoger el Cierre positivo de Kleene de una ER" do
|
86
|
+
e = ~(@er1)
|
87
|
+
s = 'cddde'
|
88
|
+
remaining = e[s]
|
89
|
+
remaining.should == "ddde"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "Se debe invocar el metodo -@ para recoger cero o una repeticion de una ER" do
|
93
|
+
e = -(@er2)
|
94
|
+
s = 'cddde'
|
95
|
+
remaining = e[s]
|
96
|
+
remaining.should == "cddde"
|
97
|
+
end
|
98
|
+
|
99
|
+
it "Se debe invocar el metodo re() para recoger una ER" do
|
100
|
+
e = 'cd'.re
|
101
|
+
s = 'cddde'
|
102
|
+
remaining = e[s]
|
103
|
+
remaining.should == "dde"
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
metadata
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: LambdaRegexp
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- mdbgalvan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: guard-rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rdoc
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rb-readline
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
description: Expresiones regulares
|
111
|
+
email:
|
112
|
+
- magomenlopark@gmail.com
|
113
|
+
executables:
|
114
|
+
- lambdaRegexp_main.rb
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- .gitignore
|
119
|
+
- .travis.yml
|
120
|
+
- Gemfile
|
121
|
+
- Guardfile
|
122
|
+
- LICENSE.txt
|
123
|
+
- LambdaRegexp.gemspec
|
124
|
+
- README.md
|
125
|
+
- Rakefile
|
126
|
+
- bin/lambdaRegexp_main.rb
|
127
|
+
- lib/LambdaRegexp.rb
|
128
|
+
- lib/LambdaRegexp/lambdaRegexp.rb
|
129
|
+
- lib/LambdaRegexp/version.rb
|
130
|
+
- spec/LambdaRegexp_spec.rb
|
131
|
+
homepage: https://github.com/mdbGalvan/LPP_Lab11
|
132
|
+
licenses: []
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 1.8.24
|
152
|
+
signing_key:
|
153
|
+
specification_version: 3
|
154
|
+
summary: Cazador de prefijos
|
155
|
+
test_files:
|
156
|
+
- spec/LambdaRegexp_spec.rb
|