Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 19:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Parser für Funktionen

Discussion on Parser für Funktionen within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 2
Join Date: Jul 2011
Posts: 729
Received Thanks: 139
Parser für Funktionen

Hallo ePvpers,

ich habe ein kleines Problem, und zwar soll ich einen Parser erstellen, der Ausdrücke FUNKTION1(a,b) und FUNKTION1(a,b) erkennt, wobei a und b wiederum von der selben Form sein können, oder aber einfach eine zahl.

Die Grammatik, die ich mir dazu ausgedacht habe, wäre:

command - > FUNKTION1(term,term) | FUNKTION2(term,term)
term - > command | num
num -> [0-9]+

Ich habe nun Probleme damit, einen Parser aus dieser Grammatik zu konstruieren.
Darum bitte ich euch, mir entweder nützliche Ansätze oder treffende Literaturhinweise zu geben.

MFG und danke,
*KiRa*

P.S.:Falls ihr Ansätze habt, bitte ich euch allerdings, mir KEINEN kompletten Lösungsweg zu geben, da ich den Code selbst schreiben möchte.
*KiRa* is offline  
Old 03/11/2015, 17:15   #2
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Recursive descent parser?

Rekursiver Abstieg ? Wikipedia


Habt ihr aber sicher auch in der Vorlesung behandelt.
dowhile is offline  
Thanks
1 User
Old 03/12/2015, 10:52   #3
 
elite*gold: 2
Join Date: Jul 2011
Posts: 729
Received Thanks: 139
Quote:
Originally Posted by dowhile View Post
Recursive descent parser?

Rekursiver Abstieg ? Wikipedia


Habt ihr aber sicher auch in der Vorlesung behandelt.
Danke für deine zwei links. Lustig ist nur, dass ich selbst gerade am KIT im 1. Semester bin, weshalb ich erst die Aufgabe habe, also kannte ich die Folien bereits.

Allerdings konnte ich das Problem nun lösen, weshalb der thread geschlossen werden kann.

Vielen Dank,
*KiRa*
*KiRa* is offline  
Old 03/17/2015, 18:06   #4


 
Menan's Avatar
 
elite*gold: 0
The Black Market: 169/0/0
Join Date: Sep 2008
Posts: 9,484
Received Thanks: 3,109
Ich hätte einen Rekursiven Parser als Java Projekt, falls Interesse besteht.

Von der Logik her, schreibst du dir eine Funktion, welche deinen übergebenen String char für char durchgeht und so die Grammatik überprüft.
Du speicherst den String in einer globalen Variable und schreibst dir eine Funktion mit folgender Signatur:
Code:
boolean isTerminal(String pcommand)
welche überprüft, ob die ersten x Zeichen deines Stringes dem übergebenen Commando entsprechen oder nicht.
Am besten legst du für deine Sammlung an Commandos eine Aufzählung an (Enum) und gehst nun jedes enum mit deiner isTerminal Funktion durch. Falls Sie true zurückgibt handelt es sich um eines der übergebenen Commandos, falls false zurückgegeben wird, wird der Index des Parsers zurück auf 0 gesetzt und auf das nächste Commando geprüft.
Menan is offline  
Old 03/19/2015, 02:31   #5
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Ich würde die Eingabe erst in Tokens zerteilen, dann kannst du direkt mit equals() oder einem switch arbeiten. Der Abgabetermin ist aber auch schon vorbei.
dowhile is offline  
Old 03/20/2015, 12:05   #6
 
elite*gold: 2
Join Date: Jul 2011
Posts: 729
Received Thanks: 139
Quote:
Originally Posted by Menan View Post
Ich hätte einen Rekursiven Parser als Java Projekt, falls Interesse besteht.

Von der Logik her, schreibst du dir eine Funktion, welche deinen übergebenen String char für char durchgeht und so die Grammatik überprüft.
Du speicherst den String in einer globalen Variable und schreibst dir eine Funktion mit folgender Signatur:
Code:
boolean isTerminal(String pcommand)
welche überprüft, ob die ersten x Zeichen deines Stringes dem übergebenen Commando entsprechen oder nicht.
Am besten legst du für deine Sammlung an Commandos eine Aufzählung an (Enum) und gehst nun jedes enum mit deiner isTerminal Funktion durch. Falls Sie true zurückgibt handelt es sich um eines der übergebenen Commandos, falls false zurückgegeben wird, wird der Index des Parsers zurück auf 0 gesetzt und auf das nächste Commando geprüft.
Wie du vielleicht meinem vorherigen Beitrag entnehmen kannst, hat sich das Problem bereits gelöst. Die Logik hinter dem Parser war auch nicht da Problem, sondern die Umsetzung von Streamtokenizer zum StringTokenizer.

@dowhile:
Ich finde allerdings dass das splitten in einzelne Tokens vor dem Parsen eher unschön ist, da dabei ein wenig das rekursive abarbeiten des Strings verloren geht. Ist aber wohl ansichtssache.
*KiRa* is offline  
Old 03/20/2015, 16:01   #7
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Quote:
Originally Posted by *KiRa* View Post
@dowhile:
Ich finde allerdings dass das splitten in einzelne Tokens vor dem Parsen eher unschön ist, da dabei ein wenig das rekursive abarbeiten des Strings verloren geht. Ist aber wohl ansichtssache.
Finde ich nicht. Wenn du StreamTokenizer genutzt hast, hast du das aber doch ohnehin auch so gemacht. Also ich meine nicht unbedingt den String erst komplett in alle Tokens zu zerlegen, und anschließend erst mit dem Parsen zu beginnen; die Schritte dürfen schon verschmelzen, wobei das ja eher ein technisches Detail ist.
Aber die Aufteilung in Lexer / Tokenizer und Parser ist normal.
dowhile is offline  
Reply


Similar Threads Similar Threads
[Release]duffbier`s D3D NoMenu Base [D3D Funktionen/Normale Funktionen]
06/01/2011 - WarRock Hacks, Bots, Cheats & Exploits - 15 Replies
Hey Com. Ich hab mich entschieden meine D3D NoMenu Base zu Releasen In dieser kannst du normale Funktionen sowie D3D Funktionen adden Screens: http://img64.imageshack.us/img64/4444/screeenl.jp g
°*NEW Funktionen*° th3man0f22 NO MENÜ Public Hack°*NEW Funktionen*° 06.09.2010
09/06/2010 - WarRock Hacks, Bots, Cheats & Exploits - 2 Replies
Funktionen: PLAYERPOINTER ¤SERVERPOINTER (Immer an)¤ ¤NOSPREAD (Numm-Pad 7)¤ ¤FULLBRIGHT (Numm-Pad 5)¤ ¤EXTRAAMMO1 (Immer an)¤ ¤EXTRAAMMO2 (Immer an)¤ ¤SCOPE (Rechte Maustaste)¤ ¤FASTAMMO (Immer an)¤



All times are GMT +1. The time now is 19:40.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.