 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Andreas Volz Guest
|
Posted: Tue Jun 08, 2004 7:33 pm Post subject: Parser - eingebettete Skriptsprache? |
|
|
Hi,
Ich habe in mein Programm eine Art Shell eingebaut wo ich in einem
Thread Befehle in der Kommandozeile eintippen kann und damit den anderen
Thread steuere. Momentan mache ich das so:
...
fgets (parser_string, 1024, stdin);
commands = sscanf(parser_string, "%s %s %s %s",
parser_key, parser_value, parser_value2, parser_value3);
if (init)
{
cmutex.Lock ();
switch (commands)
{
case -1:
break;
case 1: // Befehle mit einem "Wort"
if (!strcmp (parser_key, "quit"))
{
quit = true;
}
if (!strcmp (parser_key, "stop"))
{
for (int i = 0; i < (int)
robotlist.GetRobotNumber(popt->team); i++)
{
if (!robotlist.GetRobot (popt->team, i, robot))
{
cout << "couldn't register robot " << i << endl;
}
br1 = brc1->getRobotByID (robot.ID);
br1->setAction (BenderRobot::ACTION_STOP);
}
}
break;
case 2: // Befehle mit zwei "Worten"
...
So könnte z.B. ein Kommando aussehen:
| Quote: | set speed id 2 0.4
status
quit
...
|
Die Lösung oben ist natürlich nicht schön und auch recht unflexibel.
Auch wäre es schön die Kommandos in "Skripte" anzulegen und diese bei
Bedarf oder beim Start auszuführen. Ich hab mir schon Gedanken über eine
eingebettete Skriptsprache in meinem Programm gemacht und mein Favorit
ist bisher LUA. Aber ich habe auf diesem Gebiet keine Erfahrung. Hat
jemand nützliche Tips wie ich mein Problem am besten in C++ löse? Oder
sogar Erfahrung mit einer eingebetteten Skriptsprache?
Gruß
Andreas
[1] http://www.lua.org/
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Steffen Rauh Guest
|
Posted: Tue Jun 08, 2004 8:27 pm Post subject: Re: Parser - eingebettete Skriptsprache? |
|
|
| Quote: | Ich habe in mein Programm eine Art Shell eingebaut wo ich in einem
Thread Befehle in der Kommandozeile eintippen kann und damit den anderen
Thread steuere. Momentan mache ich das so:
[...]
Die Lösung oben ist natürlich nicht schön und auch recht unflexibel.
Auch wäre es schön die Kommandos in "Skripte" anzulegen und diese bei
Bedarf oder beim Start auszuführen. Ich hab mir schon Gedanken über eine
eingebettete Skriptsprache in meinem Programm gemacht und mein Favorit
ist bisher LUA. Aber ich habe auf diesem Gebiet keine Erfahrung. Hat
jemand nützliche Tips wie ich mein Problem am besten in C++ löse? Oder
sogar Erfahrung mit einer eingebetteten Skriptsprache?
|
Also grundsätzlich liegt dein Problem im Gebiet "Compilerbau". Auch wenn es
lediglich eine Scriptsprache ist, die du erstellen willst - ob Maschinencode
erzeugt wird, Bytecode oder der Quelltext direkt interpretiert wird, macht
letztenendes nicht mehr all zu viel Unterschied. Zum Thema Compilerbau kann
ich wärmstens das sogenannte "Dragon Book" empfehlen (hat seinen Namen wegen
dem Drachen auf dem Cover). Es ist quasi die Bibel zum Compilerbau:
Compilers: Principles, Techniques and Tools von Aho, Sethi, Ullman
Dort werden alle Grundlagen und Verfahrensweisen erklärt. Es ist zwar nicht
mehr ganz aktuell, großartig geändert hat sich die fundamentale Arbeitsweise
eines Compilers allerdings nicht.
Aber eine Warnung vorweg: die Thematik ist nicht einfach und sehr
umfangreich (hab' schon allein zwei Monate in meiner Freizeit gebraucht, um
einen eigenen Lexer-Generator zu schreiben). Es gibt zwar Tools, welche den
Bau eines Lexers und Parsers automatisieren, dennoch ist eine eigene
Scriptsprache nicht einfach so mal eben in zwei Tagen erstellt.
Wenn du also deinen Aufwand begrenzen willst, verwende unbedingt eine
Library, welche eine Scriptsprache mit Lexer und Parser schon mitbringt. LUA
kenne ich zwar selbst noch nicht, macht aber zumindest auf den ersten Blick
einen brauchbaren Eindruck für dein Problem.
MfG,
Steffen Rauh
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Torsten Robitzki Guest
|
Posted: Tue Jun 08, 2004 9:03 pm Post subject: Re: Parser - eingebettete Skriptsprache? |
|
|
Andreas Volz wrote:
<snip>
| Quote: | Die Lösung oben ist natürlich nicht schön und auch recht unflexibel.
Auch wäre es schön die Kommandos in "Skripte" anzulegen und diese bei
Bedarf oder beim Start auszuführen.
|
Du könntest dir auch Klassenhirachie aufbauen, die bestimme, einfache
Befehle auf Deine Daten (robotlist und brc1) durchführen können. Durch
Komposition solcher einfachen Änderungen, lassen sich dann relativ
einfach kompliziertere Änderungen beschreiben.
Um solche Kompositionen zu erstellen, kann man z.B. mit boost::spirit
relativ einfach einen Parser bauen. Damit kannst du dann Deine beiden
Threads relativ einfach mit einer Queue trennen, wobei der eine Thread
Tastatureingaben in Kommandos wandelt, um sie in die Queue zu stellen,
wärend der andere ständig auf neue Kommandos wartet umd diese dann auf
die Daten los zu lassen.
| Quote: | Ich hab mir schon Gedanken über eine
eingebettete Skriptsprache in meinem Programm gemacht und mein Favorit
ist bisher LUA. Aber ich habe auf diesem Gebiet keine Erfahrung. Hat
jemand nützliche Tips wie ich mein Problem am besten in C++ löse? Oder
sogar Erfahrung mit einer eingebetteten Skriptsprache?
|
Habe ich nicht, aber boost bietet z.B: Phythen als Modul.
mfg Torsten
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Ralf Westram Guest
|
Posted: Thu Jun 10, 2004 9:52 am Post subject: Re: Parser - eingebettete Skriptsprache? |
|
|
[quoting Andreas Volz
<20040608213336.5d90828c.usenet-spam-trap (AT) brachttal (DOT) net>]
| Quote: | Ich hab mir schon Gedanken über eine
eingebettete Skriptsprache in meinem Programm gemacht und mein Favorit
ist bisher LUA. Aber ich habe auf diesem Gebiet keine Erfahrung. Hat
jemand nützliche Tips wie ich mein Problem am besten in C++ löse? Oder
sogar Erfahrung mit einer eingebetteten Skriptsprache?
|
Ich hab zwar die Einbettung von Lua bisher noch nicht selbst
vorgenommen, aber dem Anschein nach ist es recht einfach.
Lua selbst finde ich eine faszinierende Sprache: So einfach, dass
jeder Anwender damit leicht Skripte erstellen kann und trotzdem so
mächtig, dass man damit auch komplexe Dinge programmieren kann.
Ich werde beim nächsten Bedarf einer Scriptsprache auf jeden Fall Lua
nehmen.
Ralf
--
If it can't be expressed in figures, it is not science; it is opinion.
(Lazarus Long)
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Andreas Volz Guest
|
Posted: Thu Jun 10, 2004 5:07 pm Post subject: Re: Parser - eingebettete Skriptsprache? |
|
|
Am Thu, 10 Jun 2004 18:04:31 +0000 schrieb Steffen Schulze:
| Quote: | ausserdem ist lua leider pures c
daher muss man dann auch bei der einbindung in c++ mit dessen
nachteilen
leben :/
|
Kennst du eine die sich besser für C++ eignet?
Gruß
Andreas
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Steffen Schulze Guest
|
Posted: Thu Jun 10, 2004 6:04 pm Post subject: Re: Parser - eingebettete Skriptsprache? |
|
|
Ralf Westram wrote:
| Quote: | Ich hab zwar die Einbettung von Lua bisher noch nicht selbst
vorgenommen, aber dem Anschein nach ist es recht einfach.
kann es aus eigener erfahrung bestaetigen. habe einem kleinen spiel damit |
testweise scriptfaehigkeiten per console beigebracht.
| Quote: | Lua selbst finde ich eine faszinierende Sprache: So einfach, dass
jeder Anwender damit leicht Skripte erstellen kann und trotzdem so
mächtig, dass man damit auch komplexe Dinge programmieren kann.
ueber die sprache lua an sich kann man sicher streiten. mein ding ist sie |
eher nicht.
| Quote: | Ich werde beim nächsten Bedarf einer Scriptsprache auf jeden Fall Lua
nehmen.
kann sie fuer einfache projekte nur empfehlen. |
sie scheint zwar auch fuer komplexere projekte geeignet zu sein (wurde in in
spielen wie command and conquer generals oder auch freelancer benutzt)
allerdings wo es speziell auf geschwindigkeit ankommt bin ich mir nicht
sooo sicher was lua angeht.
ausserdem ist lua leider pures c
daher muss man dann auch bei der einbindung in c++ mit dessen nachteilen
leben :/
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Daniel Albuschat Guest
|
Posted: Fri Jun 11, 2004 6:41 am Post subject: Re: Parser - eingebettete Skriptsprache? |
|
|
Andreas Volz wrote:
| Quote: | Am Thu, 10 Jun 2004 18:04:31 +0000 schrieb Steffen Schulze:
ausserdem ist lua leider pures c
daher muss man dann auch bei der einbindung in c++ mit dessen
nachteilen
leben :/
Kennst du eine die sich besser für C++ eignet?
|
http://luabind.sf.net/
Hoet sich klasse an.
Aber noch nie benutzt (genauso wenig wie LUA selbst).
MfG,
Daniel Albuschat
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Francois Fernandes Guest
|
Posted: Sun Jun 20, 2004 2:52 pm Post subject: Re: Parser - eingebettete Skriptsprache? |
|
|
Andreas Volz wrote:
| Quote: | Am Thu, 10 Jun 2004 18:04:31 +0000 schrieb Steffen Schulze:
ausserdem ist lua leider pures c
daher muss man dann auch bei der einbindung in c++ mit dessen
nachteilen
leben :/
Kennst du eine die sich besser für C++ eignet?
Gruß
Andreas
Hi! |
Ich habe selbst keine Erfahrung damit, jedoch habe ich sehr viel von
python als standalone und erweiterungs-scriptsprache gelesen und auch
gesehen. Ich kenne Python leider nicht im detail, es soll eine
objektorientierte programmiersprache sein, die sich auch recht einfach
in C++ einbetten lässt. Die Sprache kommt auch immer mehr zum einsatz.
Bitte poste doch Deine erfahrungen, egal welche skriptsprache Du jetzt
einsetzt...
greets
Francois
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|