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