Programm um Scripting-Funktion erweitern

26/02/2008 - 00:19 von Tobias Müller | Report spam
Hallo Leute,

erstmal kurz mein Problem/Aufgabe umrissen.
Und zwar möchte ich ein FSM-Programm schreiben.
Das Grundkonzept steht, im Prinzip làuft es auch.
Habe auch ein kleinen Designer(WinForm) für die FSM geschrieben
Nun würde ich aber gerne zwei Dinge nicht "hardcodiert" haben:
Und zwar einmal die Bedingung für einen Zustandübergang und auch die
Aktivitàt die ein Zustand ausführt wenn es aktiv wird.
Dafür habe zwei Klassen, entryaction und Condition.
Das FSM brauch ich in einen anderen Projekt(Hauptprojekt). Nun kann ich
angepasste Klassen von den obigen beiden Klassen erben und die FSM damit
füttern.
Allerdings wàre mir lieber, wenn das zur Laufzeit möglich wàre, also im
Designer.
Also bei der Condition ein einfach String, der die Bedingung
angibt("me.Temparatur>75") und bei der Entryaction ein eine Liste mit
Kommandos("me.openVentil()"...)
Nun habe die letzten Tage einwenig gegoogelt und gelesen.
Dabei bin ich auf zwei Lösungansàtze gestössen:

1. Reflection
und
2. CodeDOM

Bei Refection müsste ich den String zerlegen und entsprechen Methoden
rausfiltern und per Invoke starten. Erscheint mir irgendwie knifflig und
klingt nicht gerade schnell

CodeDOM könnte zur Laufzeit Objekte erzeugen, dessen Klasse von einer
der beiden Klasse erbt. Dürfte wohl nach dem Erstellen schneller sein
als Reflectio und man kann sich vollkommen "austoben".

Ich hatte auch überlegt, àhnlich eines Formelparser, ein Parser
zuerstellen, der ein begrenzen Befehlsatz versteht.
Dieser Parser wàre dann für mein Hauptprojekt angepasst, kann daher auch
auf die lokalen Eigenschaften eingehen.

Aber ich kann nicht wirklich einschàtzen welcher der drei Möglichkeiten
die beste Wahl ist. Alle haben ihre Vor- und Nachteile und ich alle drei
wàren ein neues Thema für mich. Daher wollte mal nach euren Rat bzw.
Erfahrungen fragen. Vielleicht hat ja jemand was àhnliches mal umgesetzt
und kann entsprechend mir nen Schubs in die richtige Richtung geben.

Ich benutze VS2008 und FW 3.5, wobei bisher auch 2.0 ausreichend würde.

Grus
Tobias
 

Lesen sie die antworten

#1 Peter Fleischer
01/03/2008 - 13:09 | Warnen spam
"Tobias Müller" schrieb im Newsbeitrag
news:47c34ced$0$14411$

erstmal kurz mein Problem/Aufgabe umrissen.
Und zwar möchte ich ein FSM-Programm schreiben.
Das Grundkonzept steht, im Prinzip làuft es auch.



Hi Tobias,
vielleicht erklàst du mal etwas genauer, was ein Flying Spaghetti Monster
(FSM) ist.

...
Dabei bin ich auf zwei Lösungansàtze gestössen:

1. Reflection
und
2. CodeDOM

Bei Refection müsste ich den String zerlegen und entsprechen Methoden
rausfiltern und per Invoke starten. Erscheint mir irgendwie knifflig und
klingt nicht gerade schnell



In beiden Fàllen musst du den String zerlegen. Mit regulàren Ausdrücken ist
das aber wirklich kein Problem. Wichtag dabei ist aber, dass du zuerst eine
Sprache definierst, in der der Zeichenketteninhalt zu formulieren ist.

Es gibt aber auch noch einen dritten Weg. Wenn es wirklich nur um die 3
Sprachelemente geht - Eigenschaft, Operation, Wert -, dann kann man auch
prozedural arbeiten. das setzt aber voraus, dass die Sprache die Menge der
Eigenschaften vorschreibt. Wenn das nicht möglich ist, könnte man einen
Zwischenweg nutzen, indem man einmalig mit Reflection den zur Verfügung
stehen Umfang zu Programmbeginn làdt.

CodeDOM könnte zur Laufzeit Objekte erzeugen, dessen Klasse von einer der
beiden Klasse erbt. Dürfte wohl nach dem Erstellen schneller sein als
Reflectio und man kann sich vollkommen "austoben".



Das ist bestimmt nicht schneller, da zuerst das Programm per Code als Text
automatisch zu schreiben ist, dann zu übersetzen ist und erst dann kann
instanziert werden.

Ich hatte auch überlegt, àhnlich eines Formelparser, ein Parser
zuerstellen, der ein begrenzen Befehlsatz versteht.
Dieser Parser wàre dann für mein Hauptprojekt angepasst, kann daher auch
auf die lokalen Eigenschaften eingehen.



Damit würde ich erst einmal anfangen. Wenn das alles richtig gekapselt ist,
ist es bestimmt nicht schwer, spàter zu erweitern.

Aber ich kann nicht wirklich einschàtzen welcher der drei Möglichkeiten
die beste Wahl ist. Alle haben ihre Vor- und Nachteile und ich alle drei
wàren ein neues Thema für mich. Daher wollte mal nach euren Rat bzw.
Erfahrungen fragen. Vielleicht hat ja jemand was àhnliches mal umgesetzt
und kann entsprechend mir nen Schubs in die richtige Richtung geben.



Eine eierlegende Wollmilchsau zu konzipieren ist nicht so einfach und für
die mir bekannten Orgablàufe auch bisher nicht erforderlich gewesen.

Ich benutze VS2008 und FW 3.5, wobei bisher auch 2.0 ausreichend würde.



Ich würde einen ganz anderen Weg betrachten und keine eigene Sprache
erfinden, sondern die Daten als XMLDokumente verwalten und dann einige
wenige Funktionen für den Anwender bereitstellen, wo dieser mit XPath und
XQuery seine Fragen formulieren kann und die entsprechenden Ergebnisse
bekommt.

Viele Gruesse

Peter

Ähnliche fragen