sprache 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/sprache +6 -17
  2. data/sprache.rb +157 -41
  3. metadata +2 -2
@@ -1,20 +1,11 @@
1
1
  #!/usr/bin/ruby
2
2
  puts '
3
3
 
4
-
5
- Verwendung:
6
- Sprache started im interaktiven Modus wenn kein Argument gegeben ist.
7
- Ist eine Datei als Argument gegeben wird diese interpretiert bevor der
8
- interaktive Modus gestartet wird.
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 durch.
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.insert(2, "nicht") unless stimmt
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
- if woerter.delete("und") or woerter.delete("aber")
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.1
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-06 00:00:00.000000000 Z
12
+ date: 2012-11-07 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description:
15
15
  email: