C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Parser - eingebettete Skriptsprache?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andreas Volz
Guest





PostPosted: Tue Jun 08, 2004 7:33 pm    Post subject: Parser - eingebettete Skriptsprache? Reply with quote



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





PostPosted: Tue Jun 08, 2004 8:27 pm    Post subject: Re: Parser - eingebettete Skriptsprache? Reply with quote



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





PostPosted: Tue Jun 08, 2004 9:03 pm    Post subject: Re: Parser - eingebettete Skriptsprache? Reply with quote



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





PostPosted: Thu Jun 10, 2004 9:52 am    Post subject: Re: Parser - eingebettete Skriptsprache? Reply with quote

[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





PostPosted: Thu Jun 10, 2004 5:07 pm    Post subject: Re: Parser - eingebettete Skriptsprache? Reply with quote

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





PostPosted: Thu Jun 10, 2004 6:04 pm    Post subject: Re: Parser - eingebettete Skriptsprache? Reply with quote

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





PostPosted: Fri Jun 11, 2004 6:41 am    Post subject: Re: Parser - eingebettete Skriptsprache? Reply with quote

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





PostPosted: Sun Jun 20, 2004 2:52 pm    Post subject: Re: Parser - eingebettete Skriptsprache? Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.