Class: Lingo::Attendee::Debugger
- Inherits:
-
Lingo::Attendee
- Object
- Lingo::Attendee
- Lingo::Attendee::Debugger
- Defined in:
- lib/lingo/attendee/debugger.rb
Overview
– Die Attendees von Lingo übergeben Daten über ihre Kommunikationskanäle und entweder kommt bei einer komplexen Konfiguration hinten das gewünschte Ergebnis raus oder aber auch nicht. Für den letzeren Fall ist der Debugger primär gedacht. Er kann an beliebige Stelle in den Datenstrom eingeschleust werden, um Schritt für Schritt zu schauen, durch welchen Attendee das Ergebnis verfälscht wird um so den Fehler einzugrenzen und schließlich zu lösen.
Der Debugger wird jedoch auch gerne für die Verfolgung der Verarbeitung am Bildschirm verwendet.
Achtung: Um Irritationen bei der Anwendung mehrerer Debugger zu vermeiden wird empfohlen, den Debugger in der Konfiguration immer unmittelbar nach dem Attendee zu platzieren, dessen Ausgabe debugt werden soll. Ansonsten kann es zu scheinbar unerklärlichen Interferrenzen bei der Ausgabe kommen.
Mögliche Verlinkung
- Erwartet
-
Daten beliebigen Typs
Parameter
Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung). Alle anderen Parameter müssen zwingend angegeben werden.
- in
-
siehe allgemeine Beschreibung des Attendee
- out
-
siehe allgemeine Beschreibung des Attendee
- eval
-
(Standard: true) Gibt eine Bedingung an, die erfüllt sein muss, damit ein Datenobjekt ausgegeben wird (siehe Beschreibung Objectfilter)
- ceval
-
(Standard: true) Gibt eiune Bedingung an, die erfüllt sein muss, damit ein
Kommandoobjekt ausgegeben wird.
- prompt
-
(Standard: ‘lex:) ’) Gibt an, mit welchem Prefix die Ausgabe versehen werden soll. Insbesondere wenn mit mehreren Debuggern gearbeitet wird, sollte dies genutzt werden.
Beispiele
Bei der Verarbeitung der oben angegebenen Funktionsbeschreibung des Textwriters mit der Ablaufkonfiguration t1.cfg
meeting:
attendees:
- text_reader: { out: lines, files: '$(files)' }
- debugger: { in: lines, prompt: 'LINES:) ' }
- tokenizer: { in: lines, out: token }
- debugger: { in: token, prompt: 'TOKEN:) ' }
ergibt die Ausgabe
LINES:) *FILE('test.txt')
TOKEN:) *FILE('test.txt')
LINES:) "Der Debugger kann was."
TOKEN:) :Der/WORD:
TOKEN:) :Debugger/WORD:
TOKEN:) :kann/WORD:
TOKEN:) :was/WORD:
TOKEN:) :./PUNC:
TOKEN:) *EOL('test.txt')
LINES:) "Lingo auch :o)"
TOKEN:) :Lingo/WORD:
TOKEN:) :auch/WORD:
TOKEN:) ::/PUNC:
TOKEN:) :o/WORD:
TOKEN:) :)/OTHR:
TOKEN:) *EOL('test.txt')
LINES:) *EOF('test.txt')
TOKEN:) *EOF('test.txt')
++
Direct Known Subclasses
Constant Summary
Constants inherited from Lingo::Attendee
Constants included from Language
Language::CHAR_PUNCT, Language::LA_SORTORDER, Language::TA_ABBREVIATION, Language::TA_HELP, Language::TA_HTML, Language::TA_NUMBER, Language::TA_OTHER, Language::TA_PUNCTUATION, Language::TA_SKIP, Language::TA_SPACE, Language::TA_URL, Language::TA_WIKI, Language::TA_WORD, Language::WA_COMPOUND, Language::WA_IDENTIFIED, Language::WA_MULTIWORD, Language::WA_SEQUENCE, Language::WA_UNKMULPART, Language::WA_UNKNOWN, Language::WA_UNSET
Instance Attribute Summary
Attributes inherited from Lingo::Attendee
Instance Method Summary collapse
- #control(cmd, param = nil) ⇒ Object
- #init(default_prompt = 'lex:) ') ⇒ Object
- #process(obj) ⇒ Object
Methods inherited from Lingo::Attendee
#command, #forward, #initialize
Constructor Details
This class inherits a constructor from Lingo::Attendee
Instance Method Details
#control(cmd, param = nil) ⇒ Object
107 108 109 110 111 112 113 |
# File 'lib/lingo/attendee/debugger.rb', line 107 def control(cmd, param = nil, *) if @cmd_eval debug(eval(@cmd_eval)) { "*#{cmd}('#{param}')" } elsif cmd == :EOL :skip_command end end |
#init(default_prompt = 'lex:) ') ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/lingo/attendee/debugger.rb', line 94 def init(default_prompt = 'lex:) ') @prompt = get_key('prompt', default_prompt) unless @filter ||= get_key('filter', false) @cmd_eval = get_key('ceval', 'true') else @cmd_eval = nil end @obj_eval = get_key('eval', 'true') @preamble = get_key('preamble', true) end |
#process(obj) ⇒ Object
115 116 117 118 |
# File 'lib/lingo/attendee/debugger.rb', line 115 def process(obj, *) debug(eval(@obj_eval)) { obj.inspect } forward(obj) unless @filter end |