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 ADDED
@@ -0,0 +1,20 @@
1
+ # Backup
2
+ *~
3
+ # bundle gem
4
+ *.gem
5
+ *.rbc
6
+ .bundle
7
+ .config
8
+ .yardoc
9
+ Gemfile.lock
10
+ InstalledFiles
11
+ _yardoc
12
+ coverage
13
+ doc/
14
+ lib/bundler/man
15
+ pkg
16
+ rdoc
17
+ spec/reports
18
+ test/tmp
19
+ test/version_tmp
20
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ # File : .travis.yml
2
+
3
+ language: ruby
4
+ rvm:
5
+ - 1.9.3
6
+ - jruby-18mode # JRuby in 1.8 mode
7
+ - jruby-19mode # JRuby in 1.9 mode
8
+ - rbx-18mode
9
+ - rbx-19mode
10
+ - 1.8.7
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ULL-ETSII-Alu3299-LambdaRegexp.gemspec
4
+ gemspec
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
@@ -0,0 +1,3 @@
1
+ module LambdaRegexp
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,16 @@
1
+ # File : ULL-ETSII-Alu3299-LambdaRegexp.rb
2
+
3
+ require "LambdaRegexp/version"
4
+ require "LambdaRegexp/lambdaRegexp.rb"
5
+
6
+ module ULL
7
+ module ETSII
8
+ module Alu3299
9
+ module LambdaRegexp
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+
@@ -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