sprache 0.0.1 → 0.0.2
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/bin/sprache +6 -17
- data/sprache.rb +157 -41
- metadata +2 -2
data/bin/sprache
CHANGED
@@ -1,20 +1,11 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
puts '
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
sprache tutorial
|
12
|
-
----------------
|
13
|
-
|
14
|
-
Konventionen:
|
15
|
-
Es koennen Substantive, Adjektive und Verben verwendet werden
|
16
|
-
um Logik zu beschreiben.
|
17
|
-
Diese werden ab jetzt mit S, A und V abgekuerzt.
|
4
|
+
Grundlagen:
|
5
|
+
Substantiven koennen Adjektive und Verben zugewiesen werden,
|
6
|
+
dazu werden die woerter "ist", "hat" und "kann"
|
7
|
+
verwendet. Gibt man nur den namen eines Substantives ein
|
8
|
+
wird eine Beschreibung ausgegeben.
|
18
9
|
|
19
10
|
Zuweisungen:
|
20
11
|
Adjektive und Verben koennen mit "ist", "hat" und "kann"
|
@@ -45,7 +36,7 @@ Zuweisungen:
|
|
45
36
|
usw
|
46
37
|
|
47
38
|
Fragen:
|
48
|
-
Zuweisungen koennen abgefragt werden
|
39
|
+
Zuweisungen koennen mit "ist", "kann" und "hat" auch abgefragt werden.
|
49
40
|
> ist S A
|
50
41
|
> kann S V
|
51
42
|
> hat S S
|
@@ -59,8 +50,6 @@ Fragen:
|
|
59
50
|
|
60
51
|
> ist Sprache toll
|
61
52
|
ja
|
62
|
-
> kann Schwein fliegen?
|
63
|
-
nein
|
64
53
|
|
65
54
|
Definitionen:
|
66
55
|
Definitionen sind gruppen von Zeilen die mit einem Verb assoziert sind
|
data/sprache.rb
CHANGED
@@ -1,6 +1,132 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
|
+
puts '
|
3
|
+
|
4
|
+
Grundlagen:
|
5
|
+
Substantiven koennen Adjektive und Verben zugewiesen werden,
|
6
|
+
dazu werden die woerter "ist", "hat" und "kann"
|
7
|
+
verwendet. Gibt man nur den namen eines Substantives ein
|
8
|
+
wird eine Beschreibung ausgegeben.
|
9
|
+
|
10
|
+
Zuweisungen:
|
11
|
+
Adjektive und Verben koennen mit "ist", "hat" und "kann"
|
12
|
+
Substantiven zugewiesen werden. Die worte "der", "die", "das",
|
13
|
+
"ein", "eine" und "einen" koennen fuer Lesbarkeit verwentet werden,
|
14
|
+
werden jedoch vom Interpreter ignoriert.
|
15
|
+
|
16
|
+
> S ist A
|
17
|
+
> S kann V
|
18
|
+
> S hat S
|
19
|
+
> der S hat S
|
20
|
+
> S hat ein S
|
21
|
+
usw
|
22
|
+
|
23
|
+
zum Beispiel:
|
24
|
+
|
25
|
+
> Sprache ist toll
|
26
|
+
> der Schueler kann schreiben
|
27
|
+
> das Handy hat ein Tastenfeld
|
28
|
+
|
29
|
+
Zum Entfernen von Zuweisungen koennen die woerter "nicht", "kein",
|
30
|
+
"keine", "keinen" verwendet werden:
|
31
|
+
|
32
|
+
> S ist nicht A
|
33
|
+
> S kann nicht V
|
34
|
+
> S kann keinen V
|
35
|
+
> S hat kein S
|
36
|
+
usw
|
37
|
+
|
38
|
+
Fragen:
|
39
|
+
Zuweisungen koennen mit "ist", "kann" und "hat" auch abgefragt werden.
|
40
|
+
> ist S A
|
41
|
+
> kann S V
|
42
|
+
> hat S S
|
43
|
+
|
44
|
+
Fragezeichen koennen zur Lesbarkeit angefuegt werden:
|
45
|
+
> ist S A?
|
46
|
+
|
47
|
+
Die antwort ist ja oder nein.
|
48
|
+
|
49
|
+
zum Beispiel:
|
50
|
+
|
51
|
+
> ist Sprache toll
|
52
|
+
ja
|
53
|
+
|
54
|
+
Definitionen:
|
55
|
+
Definitionen sind gruppen von Zeilen die mit einem Verb assoziert sind
|
56
|
+
(siehe Aktionen).
|
57
|
+
In Definitionen kann "*", "er" uns "sie" mit dem ausfuehrenden
|
58
|
+
Substantiv ersetzt und "es" mit dem Verb selbst
|
59
|
+
(siehe Aktionen).
|
60
|
+
Definitionen werden mit "vom" eingeleitet und enden mit einer Leerzeile
|
61
|
+
(auch in einer Datei). Im interaktiven Modus wechselt bei Definitionen
|
62
|
+
die Prompt von ">" nach " -"
|
63
|
+
|
64
|
+
> vom V
|
65
|
+
- ZEILE1
|
66
|
+
- ZEILE2
|
67
|
+
...
|
68
|
+
- ZEILEN
|
69
|
+
-
|
70
|
+
>
|
71
|
+
|
72
|
+
zum Beispiel:
|
73
|
+
|
74
|
+
> vom schlafen
|
75
|
+
- sub ist ausgeruht
|
76
|
+
- bett ist zerknittert
|
77
|
+
-
|
78
|
+
>
|
79
|
+
|
80
|
+
|
81
|
+
Aktionen:
|
82
|
+
Durch Aktionen koennen Definitionen ausgefuehrt werden:
|
83
|
+
|
84
|
+
> S tut V
|
85
|
+
|
86
|
+
zum Beispiel:
|
87
|
+
|
88
|
+
> Die Sonne tut scheinen
|
89
|
+
|
90
|
+
Dies bewirkt auch, dass S V kann.
|
91
|
+
|
92
|
+
Bedingungen:
|
93
|
+
Mit "wenn" koennen Bedingungen angefuegt werden.
|
94
|
+
|
95
|
+
> S ist A wenn S2 A2 ist
|
96
|
+
> S ist A wenn S2 V kann
|
97
|
+
|
98
|
+
Bedingungen koennen mit "und" oder "oder" erweitert werden.
|
99
|
+
Kommas koennen fuer lesbarkeit verwendet werden.
|
100
|
+
|
101
|
+
> S ist A wenn S2 A2, A3 und A4 ist
|
102
|
+
> S ist A wenn S2 V, V2, oder V3 kann
|
103
|
+
|
104
|
+
Durch "nicht", "kein", "keine" und "keinen" koennen bedingungen
|
105
|
+
negiert werden.
|
106
|
+
|
107
|
+
Globale Bedingungen:
|
108
|
+
Sind alle Bedingungen, die nicht in Definitionen vorkommen.
|
109
|
+
Sie werden gespeichert und pro zeile ausgewertet.
|
110
|
+
Wenn eine globale Bedingung nicht erfuellt wird, hat
|
111
|
+
die Zeile den umgekehrten effekt.
|
112
|
+
"er", "sie", "es" und "*" werden durch das Subjektiv am
|
113
|
+
Anfang der Zeile ersetzt
|
114
|
+
|
115
|
+
Lokale Bedingungen:
|
116
|
+
Sind bedingungen in definitionen.
|
117
|
+
Sie werden nur beim ausfuehren der Aktion ausgewertet.
|
118
|
+
Wenn eine lokale Bedingung nicht erfuellt ist, wird die
|
119
|
+
Zeile ignoriert.
|
120
|
+
"er", "sie" und "*" werden durch das Subjektiv am
|
121
|
+
Anfang der Zeile ersetzt. "es" wird durch den Namen der Aktion
|
122
|
+
ersetzt.
|
123
|
+
|
124
|
+
|
125
|
+
Beschreiben:
|
126
|
+
Wenn nur der Name eines Substantives oder Verbes eingebeben wird, wird
|
127
|
+
es beschrieben.
|
128
|
+
'
|
2
129
|
|
3
|
-
require "dbg"
|
4
130
|
$zeilen = ARGF.readlines if ARGV[0]
|
5
131
|
$zeilen = [] unless $zeilen
|
6
132
|
$zeile = -1
|
@@ -220,66 +346,56 @@ class Sprache
|
|
220
346
|
end
|
221
347
|
@stimmt = stimmt
|
222
348
|
stimmt = stimmt.! if nicht
|
223
|
-
woerter.
|
349
|
+
if (woerter.index("kein") or
|
350
|
+
woerter.index("keine") or
|
351
|
+
woerter.index("keinen") or
|
352
|
+
woerter.index("nicht")) and not stimmt
|
353
|
+
woerter.delete("nicht")
|
354
|
+
woerter.delete("kein")
|
355
|
+
woerter.delete("keine")
|
356
|
+
woerter.delete("keinen")
|
357
|
+
elsif not stimmt
|
358
|
+
woerter.insert(2, "nicht")
|
359
|
+
end
|
224
360
|
end
|
225
361
|
|
362
|
+
p = " "
|
363
|
+
|
226
364
|
if woerter.length == 1
|
227
365
|
if substantiv = hole(zeile[0..-2])
|
228
|
-
puts "#"
|
366
|
+
puts "#{p}"
|
229
367
|
if substantiv.adjektive != []
|
230
|
-
puts "# ist:"
|
231
|
-
puts substantiv.adjektive.collect{|a| "# - " + a}
|
232
|
-
puts "#"
|
368
|
+
puts "#{p} ist:"
|
369
|
+
puts substantiv.adjektive.collect{|a| "#{p} - " + a}
|
370
|
+
puts "#{p}"
|
233
371
|
end
|
234
372
|
|
235
373
|
if substantiv.besitz != []
|
236
|
-
puts "# hat:"
|
237
|
-
puts substantiv.besitz.collect{|a| "# - " + a}
|
238
|
-
puts "#"
|
374
|
+
puts "#{p} hat:"
|
375
|
+
puts substantiv.besitz.collect{|a| "#{p} - " + a}
|
376
|
+
puts "#{p}"
|
239
377
|
end
|
240
378
|
|
241
379
|
if substantiv.verben != []
|
242
|
-
puts "# kann:"
|
243
|
-
puts substantiv.verben.collect{|a| "# - " + a}
|
244
|
-
puts "#"
|
380
|
+
puts "#{p} kann:"
|
381
|
+
puts substantiv.verben.collect{|a| "#{p} - " + a}
|
382
|
+
puts "#{p}"
|
245
383
|
end
|
246
384
|
if (bedingungen = @bedingungen.collect{ |b|
|
247
|
-
"# - " + b if b[substantiv.bezeichner]
|
385
|
+
"#{p} - " + b if b[substantiv.bezeichner]
|
248
386
|
}) != []
|
249
|
-
puts "# bedingungen:"
|
387
|
+
puts "#{p} bedingungen:"
|
250
388
|
puts bedingungen
|
251
|
-
puts "#"
|
389
|
+
puts "#{p}"
|
252
390
|
end
|
253
391
|
end
|
254
392
|
if @definitionen.keys.index(zeile[0..-2])
|
255
|
-
puts @definitionen[zeile[0..-2]].split("\n").collect{|a| "# - " + a}
|
256
|
-
puts
|
393
|
+
puts @definitionen[zeile[0..-2]].split("\n").collect{|a| "#{p} - " + a}
|
394
|
+
puts "#{p}"
|
257
395
|
end
|
258
396
|
end
|
259
397
|
|
260
|
-
|
261
|
-
zeilen = []
|
262
|
-
woerter[2..-1].each do |wort|
|
263
|
-
zeilen << (woerter[0..1]+ [wort]).join(" ")
|
264
|
-
end
|
265
|
-
|
266
|
-
zeilen.each_with_index do |zeile, i|
|
267
|
-
zeile = zeile.dup.split()
|
268
|
-
if ["nicht", "kein", "keine", "keinen"].index(zeile[-1])
|
269
|
-
nicht_einfuegen = true
|
270
|
-
zeilen.delete_at(i)
|
271
|
-
end
|
272
|
-
if nicht_einfuegen
|
273
|
-
zeilen[i] = zeilen[i].split.insert(2, "nicht").join(" ")
|
274
|
-
nicht_einfuegen = false
|
275
|
-
end
|
276
|
-
end
|
277
|
-
zeilen.each do |zeile|
|
278
|
-
zeile = zeile.split.insert(2, "nicht").join(" ") unless @stimmt
|
279
|
-
zeile_interpretieren(zeile)
|
280
|
-
end
|
281
|
-
@stimmt = true
|
282
|
-
end
|
398
|
+
|
283
399
|
|
284
400
|
if woerter.length > 1
|
285
401
|
nicht = woerter.delete "nicht"
|
@@ -329,9 +445,9 @@ class Sprache
|
|
329
445
|
end
|
330
446
|
|
331
447
|
if woerter[1] == "tut" and not nicht
|
332
|
-
hole(woerter[0]).kann! woerter[2]
|
333
448
|
subjektiv = woerter[0]
|
334
449
|
verb = woerter[2]
|
450
|
+
kann subjektiv, verb
|
335
451
|
if (funktion = @definitionen[woerter[2]])
|
336
452
|
funktion.split("\n").each do |zeile|
|
337
453
|
zeile.gsub!(/\*/, subjektiv)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sprache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email:
|