LambdaRegexp 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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