rlsm 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +15 -6
- data/Rakefile +0 -1
- data/bin/smon +4 -0
- data/lib/rlsm.rb +1 -1
- data/lib/rlsm/monoid.rb +10 -3
- data/lib/rlsm/monoid_db.rb +1 -1
- data/lib/smon/commands/exit.rb +9 -0
- data/lib/smon/commands/help.rb +31 -0
- data/lib/smon/commands/intro.rb +32 -0
- data/lib/smon/commands/monoid.rb +27 -0
- data/lib/smon/commands/quit.rb +10 -0
- data/lib/smon/commands/regexp.rb +20 -0
- data/lib/smon/commands/reload.rb +22 -0
- data/lib/smon/commands/show.rb +34 -0
- data/lib/smon/smon.rb +80 -0
- metadata +17 -18
- data/bin/rlsm +0 -0
data/Manifest.txt
CHANGED
@@ -2,14 +2,23 @@ History.txt
|
|
2
2
|
Manifest.txt
|
3
3
|
README.txt
|
4
4
|
Rakefile
|
5
|
-
bin/
|
6
|
-
lib/rlsm.rb
|
5
|
+
bin/smon
|
7
6
|
lib/data/monoids.db
|
8
|
-
lib/rlsm
|
7
|
+
lib/rlsm.rb
|
9
8
|
lib/rlsm/dfa.rb
|
10
|
-
lib/rlsm/
|
11
|
-
lib/rlsm/monoid_db.rb
|
9
|
+
lib/rlsm/exceptions.rb
|
12
10
|
lib/rlsm/mgen.rb
|
13
11
|
lib/rlsm/monkey_patching.rb
|
14
|
-
lib/rlsm/
|
12
|
+
lib/rlsm/monoid.rb
|
13
|
+
lib/rlsm/monoid_db.rb
|
14
|
+
lib/rlsm/regexp.rb
|
15
|
+
lib/smon/commands/exit.rb
|
16
|
+
lib/smon/commands/help.rb
|
17
|
+
lib/smon/commands/intro.rb
|
18
|
+
lib/smon/commands/monoid.rb
|
19
|
+
lib/smon/commands/quit.rb
|
20
|
+
lib/smon/commands/regexp.rb
|
21
|
+
lib/smon/commands/reload.rb
|
22
|
+
lib/smon/commands/show.rb
|
23
|
+
lib/smon/smon.rb
|
15
24
|
test/test_rlsm.rb
|
data/Rakefile
CHANGED
data/bin/smon
ADDED
data/lib/rlsm.rb
CHANGED
data/lib/rlsm/monoid.rb
CHANGED
@@ -36,7 +36,7 @@ class Monoid
|
|
36
36
|
def initialize(table, options = {})
|
37
37
|
options[:normalize] = true if options[:normalize].nil?
|
38
38
|
|
39
|
-
_create_binary_operation(table)
|
39
|
+
_create_binary_operation(table, options[:names])
|
40
40
|
_check_form_of_binary_operation
|
41
41
|
_check_associativity_of_binary_operation
|
42
42
|
|
@@ -463,7 +463,7 @@ class Monoid
|
|
463
463
|
res.sort
|
464
464
|
end
|
465
465
|
|
466
|
-
def _create_binary_operation(table)
|
466
|
+
def _create_binary_operation(table, names)
|
467
467
|
if table.instance_of? Array
|
468
468
|
@order = table.size
|
469
469
|
@bo = table
|
@@ -485,7 +485,14 @@ class Monoid
|
|
485
485
|
end
|
486
486
|
|
487
487
|
#Convert to internal represenation
|
488
|
-
|
488
|
+
#Names given?
|
489
|
+
if names and names.class == Array and names.size == @order
|
490
|
+
@names = names
|
491
|
+
else
|
492
|
+
#Make a guess, works if convention is followed.
|
493
|
+
@names = @bo.flatten.uniq.clone
|
494
|
+
end
|
495
|
+
|
489
496
|
@bo = (@bo.flatten.map { |e| @names.index(e) })/@order
|
490
497
|
end
|
491
498
|
|
data/lib/rlsm/monoid_db.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
#category help
|
2
|
+
=begin help
|
3
|
+
Prints help topics.
|
4
|
+
|
5
|
+
Usage: help "command"
|
6
|
+
Prints the help topic for +command+.
|
7
|
+
The command name must be surrounded by " (double quote).
|
8
|
+
Example: help help -> prints this text.
|
9
|
+
|
10
|
+
=end
|
11
|
+
def help(cmd = nil)
|
12
|
+
if cmd.nil?
|
13
|
+
puts "Known Commands:"
|
14
|
+
Categories.each_pair do |cat, cmds|
|
15
|
+
puts " Category #{cat}"
|
16
|
+
cmds.each do |cmd|
|
17
|
+
puts " #{cmd} : #{(CmdHelp[cmd] || [cmd]).first}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
puts
|
21
|
+
puts 'Type help "command" for more information for "command"'
|
22
|
+
puts '(command must be surrounded by double quotes!)'
|
23
|
+
puts
|
24
|
+
else
|
25
|
+
if CmdHelp[cmd]
|
26
|
+
puts CmdHelp[cmd].join
|
27
|
+
else
|
28
|
+
puts " Nothing known about #{cmd}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#category help
|
2
|
+
=begin help
|
3
|
+
Displays a small introduction.
|
4
|
+
|
5
|
+
Usage: intro
|
6
|
+
|
7
|
+
Shows some of the rules for work with the program.
|
8
|
+
=end
|
9
|
+
|
10
|
+
def intro
|
11
|
+
puts <<INTRO
|
12
|
+
======================
|
13
|
+
INTRODUCTION TO SMON
|
14
|
+
======================
|
15
|
+
|
16
|
+
==Basic rules
|
17
|
+
- Every input, which should be interpreted literally
|
18
|
+
must be surrounded by quotes or double quotes.
|
19
|
+
|
20
|
+
- Parenthesis for commands may be omitted in the most cases.
|
21
|
+
When in doubt, write the parenthesis.
|
22
|
+
|
23
|
+
- Basicly, every valid Ruby command is allowed.
|
24
|
+
|
25
|
+
==Basic Usage
|
26
|
+
- Type < help > for an overview of availible commands.
|
27
|
+
|
28
|
+
- If you wanna use variables, just type < @var = ... >.
|
29
|
+
The @-sign is important!
|
30
|
+
|
31
|
+
INTRO
|
32
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#category RLSM
|
2
|
+
|
3
|
+
=begin help
|
4
|
+
Creates a monoid.
|
5
|
+
|
6
|
+
Usage: monoid desc or monoid(desc)
|
7
|
+
|
8
|
+
+desc+ is here the description of a binary operation. The form of the
|
9
|
+
description follows some simple rules:
|
10
|
+
- A binary operation is represented as a quadratic matrix
|
11
|
+
- Rows are seperated by ' ' (space)
|
12
|
+
- Columns are seperated by ',' (comma)
|
13
|
+
The comma may be omitted if every element descriptor is only one
|
14
|
+
char.
|
15
|
+
- The first row and column belongs to the neutral element.
|
16
|
+
- The +desc+ parameter must be surrounded by " (double quote)
|
17
|
+
|
18
|
+
Examples:
|
19
|
+
monoid "1a aa"
|
20
|
+
monoid "1ab aab bab"
|
21
|
+
monoid "1,a a,1"
|
22
|
+
=end
|
23
|
+
|
24
|
+
def monoid(desc)
|
25
|
+
RLSM::Monoid.new desc
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#category RLSM
|
2
|
+
=begin help
|
3
|
+
Creates a new Regular Expression.
|
4
|
+
|
5
|
+
Usage: regexp "desc"
|
6
|
+
|
7
|
+
+desc+ is here a description of the regexp.
|
8
|
+
A regexp may consist of
|
9
|
+
- normal characters like a,b,c, 1,2, ...
|
10
|
+
- Special characters are
|
11
|
+
- & : the emmpty word
|
12
|
+
- | : Union
|
13
|
+
- ( ) : Grouping of expressions
|
14
|
+
- * : Kleene star
|
15
|
+
|
16
|
+
=end
|
17
|
+
|
18
|
+
def regexp(desc)
|
19
|
+
RLSM::RegExp.new desc
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#category base
|
2
|
+
=begin help
|
3
|
+
Reloads a command.
|
4
|
+
|
5
|
+
Usage: reload "cmd"
|
6
|
+
|
7
|
+
Unloads the command +cmd+ if it exists, then tries to reload it.
|
8
|
+
For reloading, the program searches for an file "cmd.rb" in the load path.
|
9
|
+
=end
|
10
|
+
|
11
|
+
def reload(cmd)
|
12
|
+
return false unless Commands.include? cmd
|
13
|
+
|
14
|
+
#Removes the help entries and the command
|
15
|
+
Commands.delete cmd
|
16
|
+
CmdHelp.delete cmd
|
17
|
+
Categories.each do |cat|
|
18
|
+
cat.delete cmd
|
19
|
+
end
|
20
|
+
|
21
|
+
load(File.join(LoadPath, cmd + '.rb'))
|
22
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#category RLSM
|
2
|
+
=begin help
|
3
|
+
Shows a monoid or a regexp.
|
4
|
+
|
5
|
+
Usage: show obj
|
6
|
+
|
7
|
+
+obj+ is either a regexp or a monoid. If regexp a string representation is shown
|
8
|
+
if monoid, the binary operation is shown as a table.
|
9
|
+
Example: show monoid("0")
|
10
|
+
Not working: show "0" !
|
11
|
+
=end
|
12
|
+
|
13
|
+
def show(obj)
|
14
|
+
if obj.class == RLSM::Monoid
|
15
|
+
rows = obj.binary_operation.map { |row| row.join(' | ')}
|
16
|
+
rows.map! { |r| '| ' + r.gsub(/\w/) { |c| obj.elements[c.to_i] } + " |\n" }
|
17
|
+
row_sep = rows.first.scan(/./m).map do |c|
|
18
|
+
case c
|
19
|
+
when '|' : '+'
|
20
|
+
when "\n" : "\n"
|
21
|
+
else
|
22
|
+
'-'
|
23
|
+
end
|
24
|
+
end.join
|
25
|
+
|
26
|
+
puts row_sep
|
27
|
+
puts rows.join(row_sep)
|
28
|
+
puts row_sep
|
29
|
+
puts
|
30
|
+
else
|
31
|
+
puts obj.to_s
|
32
|
+
puts
|
33
|
+
end
|
34
|
+
end
|
data/lib/smon/smon.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require "readline"
|
2
|
+
require "abbrev"
|
3
|
+
require "rubygems"
|
4
|
+
require "rlsm"
|
5
|
+
|
6
|
+
class Smon
|
7
|
+
Commands = []
|
8
|
+
CmdHelp = {}
|
9
|
+
Categories = {}
|
10
|
+
LoadPath = File.join(File.dirname(__FILE__), 'commands')
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
#Load all commands
|
14
|
+
cmds = Dir.glob(File.join(LoadPath, '*.rb'))
|
15
|
+
cmds.each do |cmd|
|
16
|
+
load cmd, false
|
17
|
+
end
|
18
|
+
|
19
|
+
#Add the built-in commands to the help system
|
20
|
+
Commands << 'load'
|
21
|
+
CmdHelp['load'] = ["Loads a command into the system.\n",
|
22
|
+
"\nUsage: load /path/to/cmd\n",
|
23
|
+
"\n Loads the file at the given location and prints a small message if loading succeded."]
|
24
|
+
Categories['built-in'] = ['load']
|
25
|
+
|
26
|
+
#Initialize the help system
|
27
|
+
@cmd_abbrev = Commands.abbrev
|
28
|
+
|
29
|
+
#Setting up readline
|
30
|
+
Readline.completion_proc do |str|
|
31
|
+
@cmd_abbrev[str]
|
32
|
+
end
|
33
|
+
|
34
|
+
loop do
|
35
|
+
begin
|
36
|
+
instance_eval Readline.readline("rlsm (help for help) :> ", true)
|
37
|
+
rescue Exception => e
|
38
|
+
puts "Something went wrong."
|
39
|
+
puts e
|
40
|
+
end
|
41
|
+
|
42
|
+
break if @quit
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def load(file, reinit = true)
|
47
|
+
#Parsing the file
|
48
|
+
cat = nil
|
49
|
+
name = nil
|
50
|
+
help = []
|
51
|
+
parse_help = false
|
52
|
+
input = []
|
53
|
+
File.open(file).each_line do |line|
|
54
|
+
#Extracting the help
|
55
|
+
parse_help = false if line =~ Regexp.new("=end.*")
|
56
|
+
help << line if parse_help
|
57
|
+
parse_help = true if line =~ Regexp.new("=begin.*")
|
58
|
+
|
59
|
+
|
60
|
+
#Getting the category
|
61
|
+
cat = $1.dup if line =~ Regexp.new("#category\\s\+\(\\w\+\)")
|
62
|
+
|
63
|
+
#Getting the name
|
64
|
+
name = $1.dup if line =~ /def\s+(\w+)/
|
65
|
+
|
66
|
+
input << line
|
67
|
+
end
|
68
|
+
|
69
|
+
#Adding the method
|
70
|
+
self.class.class_eval input.join
|
71
|
+
|
72
|
+
#Setting up the help system
|
73
|
+
(Categories[cat] ||= []) << name
|
74
|
+
Commands << name
|
75
|
+
CmdHelp[name] = help
|
76
|
+
|
77
|
+
@cmd_abbrev = Commands.abbrev if reinit
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rlsm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- asmodis
|
@@ -12,16 +12,6 @@ cert_chain: []
|
|
12
12
|
date: 2008-11-10 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: sqlite3-ruby
|
17
|
-
type: :runtime
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: "0"
|
24
|
-
version:
|
25
15
|
- !ruby/object:Gem::Dependency
|
26
16
|
name: hoe
|
27
17
|
type: :development
|
@@ -36,7 +26,7 @@ description: "This is a ruby implementation of three concepts: - Deterministic F
|
|
36
26
|
email:
|
37
27
|
- g.diemant@gmx.net
|
38
28
|
executables:
|
39
|
-
-
|
29
|
+
- smon
|
40
30
|
extensions: []
|
41
31
|
|
42
32
|
extra_rdoc_files:
|
@@ -48,16 +38,25 @@ files:
|
|
48
38
|
- Manifest.txt
|
49
39
|
- README.txt
|
50
40
|
- Rakefile
|
51
|
-
- bin/
|
52
|
-
- lib/rlsm.rb
|
41
|
+
- bin/smon
|
53
42
|
- lib/data/monoids.db
|
54
|
-
- lib/rlsm
|
43
|
+
- lib/rlsm.rb
|
55
44
|
- lib/rlsm/dfa.rb
|
56
|
-
- lib/rlsm/
|
57
|
-
- lib/rlsm/monoid_db.rb
|
45
|
+
- lib/rlsm/exceptions.rb
|
58
46
|
- lib/rlsm/mgen.rb
|
59
47
|
- lib/rlsm/monkey_patching.rb
|
60
|
-
- lib/rlsm/
|
48
|
+
- lib/rlsm/monoid.rb
|
49
|
+
- lib/rlsm/monoid_db.rb
|
50
|
+
- lib/rlsm/regexp.rb
|
51
|
+
- lib/smon/commands/exit.rb
|
52
|
+
- lib/smon/commands/help.rb
|
53
|
+
- lib/smon/commands/intro.rb
|
54
|
+
- lib/smon/commands/monoid.rb
|
55
|
+
- lib/smon/commands/quit.rb
|
56
|
+
- lib/smon/commands/regexp.rb
|
57
|
+
- lib/smon/commands/reload.rb
|
58
|
+
- lib/smon/commands/show.rb
|
59
|
+
- lib/smon/smon.rb
|
61
60
|
- test/test_rlsm.rb
|
62
61
|
has_rdoc: true
|
63
62
|
homepage: http://www.github.com/asmodis/rlsm
|
data/bin/rlsm
DELETED
File without changes
|