Regex für (+ 2 3)

Status
Nicht offen für weitere Antworten.

f145h

Mitglied
Servus Leute,

ich versuche grad nen Interpreter für Scheme zu schreiben und da muss ich erstmal die Eingabe auf Syntax überprüfen.
also folgendes soll erkannt werde (+ 2 3) oder (- 2 3) aber auch (expt 2 3)
hab dafür ne regex geschrieben:
Java:
		Pattern p = Pattern.compile("\\([\\+ \\- \\* / = ]\\s[1-9]*\\s[1-9]*\\)");

dies erkennt aller dings nur + - * usw.. aber nicht "expt". und das ist auch mein Problem. wie kann ich in eckigeklammer ein string einfügen? also sowas funktioniert ja nicht : [\\+ \\- \\* / = expt ], da hier "expt" nicht als wort sondern als einzelne buchstaben (mit | verknüpft) erkannt wird. Ich kann dafür noch eine regax schreiben, aber das wäre ein umweg und vielleicht hat einer von euch ne idee wie ich das doch noch in [] reinpacken kann.

und meine zweite Frage wäre: kann man auch sowas (+ (- 2 3) (/ 2 (+ 2 3))) mit ner regex abdecken oder braucht man dafür nen kellerautomaten( also stack und so )?

hoffe ich hab mich einigermaßen verständlich ausgedrückt.

vielen Dank im Vorraus:)
 
S

SlaterB

Gast
(+|-|expt)
ohne eckige Klammen

und einen vollständigen Parser bekommt man mit regulären Ausdrücken nicht hin oder wenn nur extrem umständlich
(oberste Verschachtelung erkennen, für Teilausdrücke neu auswerten)
 

Ariol

Top Contributor
Versuch mal das hier (ungetestet)
Java:
Pattern p = Pattern.compile("\\([\\+|\\-|expt]\\s[1-9]+\\s[1-9]+\\)");

Was die 2. Frage angeht: Ich denke mit Regex wird das ziemlich schwer...Keller klingt einfacher
 

f145h

Mitglied
Vielen Dank:) *schäm*

also gibt es doch keine möglichkeit ein wort in ne eckige klammer reinzupacken.

Java:
[\\+|\\-|expt]

wird nicht gehen, weil der "expt" nicht als ganzes wort sieht.
 

Ariol

Top Contributor
Stimmt, du musst auch runde Klammern verwenden:
Java:
Pattern p = Pattern.compile("\\((\\+|\\-|\\*|\\/|expt)\\s[1-9]+\\s[1-9]+\\)");
 

Dissi

Aktives Mitglied
Ich hasse Scheme, 1. Semester Infostudium gehabt. Multiparadigmatische Wunderwaffe ^^
 

f145h

Mitglied
Hey leute,

hab jetzt ein zweites Problem und zwar: der benutzer kann beliebig viele zahlen eingeben und ich muss diese Zahlen abspeichern aber damit ich die zahlen richtig abspeichern kann <b>muss ich erstmal feststellen, ob die eingegebene Zahl ein Integer , ein Double, ne Komplexe Zahl usw.... ist.Gibt es dafür ne bestimmte Methode oder so?<\b> Hab lang probiert bzw. gesucht( vielleicht weis ich auch nicht wonach ich genau suchen soll :() finde aber keine Lösung dafür gefunden.
 
S

SlaterB

Gast
schwer vorzustellen was es für einen Unterschied macht, wie du es speicherst,
geh doch einfach immer vom vollständigen aus, speichere alles als Komplexe Zahl mit Komma-Zahlen, also 1.0 i +1.0 oder wie das war

das Parsen ist natürlich nicht leicht, nach dem + suchen, nach dem i usw.
meinst du vielleicht das, wie man dafür Regeln findet?
Schritt für Schritt herantasten, und dann doch lieber wieder einfach anfangen:
erstmal nur einfache Zahlen aus Ziffern parsen: 34889, kein Komma, kein +-, kein i usw.,
wenn das klappt nach und nach Varianten hinzufügen und immer darauf achten, dass die einfachen Eingaben auch akzeptiert werden,

wenn du ein konkretes Problem hast a la
'bei Eingabe xy funktioniert folgender 20zeiliger Code nicht mehr obwohl das eigentlich in Zeile 17 behandelt werden soll'
kann man dann weiterhelfen ;)
 

f145h

Mitglied
ok lassen wir fürs erste die komplexen zahlen weg( da werde ich mich wahrschein mit regex herantasten).

nehmen wir ich lese eine "3" oder ne "3.0" von der console. Um damit zu rechnen muss ich erstmal wissen ob die eingelesene Zahl eine ganze Zahl ist oder ein Kommazahl. Ich hab mir gedacht, ich fange ganz von unten an und versuche die zahl als Integer zu parsen, falls ne Exception kommt, dann versuche die zahl als double zu parsen usw...
Aber das ganze geht doch bestimmt auch einfacher oder nicht?
wenn ich erstmal weis, wie ich das machen muss, wird das ganze zu coden kein problem mehr sein:)
 
S

SlaterB

Gast
einfacher ist es, gleich als double zu parsen und zu ignorieren, ob nun Nachkommastellen da sind oder nicht,

wenn es doch einen Unterschied macht, dann den Double auf int casten und schauen, ob die Zahlen immer noch gleich sind
oder den String nach Punkt oder Komma durchsuchen,

ich sehe da kein fertiges Verfahren
 

diggaa1984

Top Contributor
hm ich weiss net ob das so gross was hilft, aber ich hab für mein grammatik-editor INT und FLOAT als wildcards in den grammatiken erlaubt, das heisst ich definiere nicht ne Zahl mittels:

Code:
INT = Digit | INT Digit
Digit = 0 | 1 | ... | 9

sonder der Nutzer kann das einfach INT und FLOAT als Nichtterminal nutzen.
Im Programm muss ich natürlich erkennen ob ich nun nen Integer oder nen FLOAT vor mir hab, das mache ich per RegExp.
Code:
float: [code](\\d+\\.\\d+([eE]?[-+]?\\d+)?)
markant der . den gibts bei Int einfach nicht[/CODE]

Dabei ziehe ich erst alle FLOATs raus, da diese von der Struktur her komplexer sind, und alles was dann noch übrig bleibt muss ein INT sein. Also erst Float raussuchen dann die Ints. Bei dir mit den komplexen Zahlen müsste es dann doch auch gehen, erst die komplexen Zahlen zu filtern (dabei muss ja minimum n i in der Zahl erscheinen) .. damit hast schonmal ne klare Abgrenzung zu den Floats .. sollte also nix schief gehen. Danach haste nur noch Floats und Ints über.

Das müsstest aber eben vorm eigentlich verarbeiten für den kompletten String entscheiden, die Frage ist wie du das verarbeitest.
 
Zuletzt bearbeitet:

Ariol

Top Contributor
Wir haben bei unserem "Compilerbau"-Projekt int und float so definiert:
Code:
INT_CONST 				= [0-9]+
FLOAT_CONST 			= [0-9]+\.[0-9]+[E|e][0-9]+|[0-9]*\.[0-9]+[df]*|[0-9]+[df]+
 

diggaa1984

Top Contributor
was ist denn 123.12345ffffffffffffffffffffffff ? (vorletzte alternative)

aso oder war das ein Stern aus der theoretischen informatik? habe den grad als stern aus java-regXp aufgefasst, da wäre das ja [0,inifitiy)
 
Zuletzt bearbeitet:

Ariol

Top Contributor
Uiiii, stimmt...
Mir fällt grad auf dass da noch mehr Fehler drin sind....
Und auch das es garnicht die Version ist, die wir abgegeben haben...Sorry
 

f145h

Mitglied
also ich habe jetzt 3 methoden geschrieben.( für Ganzezahlen(Integer),Kommezahlen(Float ) und Komplexe Zahlen) aber ich glaube diese Methoden werden sich noch im Laufe des Projekts ändern, da ich jetzt erstmal wirklich nur ganz einfache Zahlen( wie z.B 1212,12.12 oder 12+12i) abdecke. Falls jemand bessere regex hat bzw. nen Fehler entdeckt, sagt bitte bescheid.
Java:
/**
	 * Pruefe ob ne Ganzezahl
	 * @param a
	 * @return
	 */
	public static boolean isAInt(String number){
		
		Pattern p = Pattern.compile("(\\+|\\-)?\\d+");		
		Matcher m = p.matcher(number);
		boolean match = m.matches();
		
		
		return match;
		
	}
	/**
	 * Pruefe ob ne Kommazahl
	 * @param a
	 * @return
	 */
	public static boolean isAFloat(String number){
		
		Pattern p = Pattern.compile("(\\+|\\-)?\\d+\\.\\d+");		
		Matcher m = p.matcher(number);
		boolean match = m.matches();
		
		return match;
		
	}
	/**
	 * Pruefe ob eine KomplexeZahle
	 * @param a
	 * @return
	 */
	public static boolean isAComplexNumber(String number){
		
		Pattern p = Pattern.compile("\\d+\\+\\d*i");		
		Matcher m = p.matcher(number);
		boolean match = m.matches();
		
		return match;
		
	}
 

Ark

Top Contributor
Vielleicht eher so:
[java=37] Pattern p = Pattern.compile("[+-]?\\d+\\.\\d+[+-]?\\d+\\.\\d+i");[/code]
Aber was machst du mit Ausdrücken wie [c]12+(4*f)i[/c]? Ich glaube, du solltest dich vom Versuch verabschieden, das alles in Typ 3 pressen zu wollen.

Ark
 

f145h

Mitglied
@Ark also so 12+(4*f)i ist in Scheme glaub ich gar nicht erlaubt ( hoffe ich zumindest ;), sowie ich Scheme bis jetzt verstanden habe, taucht immer ein Operator nach der klammer und dann die argumente,deshalb ist es auch möglich dafür einen regulären ausdruck anzugeben. vielleicht liege ich auch falsch damit, da ich wirklich noch ein änfänger bin, was Scheme angeht.
ansonten danke für deinen Hinweis mit den Kommazahlen:)
 

Ark

Top Contributor
Ich habe mich mal kurz schlau gemacht, was die Syntax von Scheme angeht, und speziell diese Ausdrücke scheinen in eine Typ-2-Grammatik zu gehören, ergo reichen Typ-3-Grammatiken (also reguläre Ausdrücke) nicht aus. Das ganze hat übrigens nichts mit der Position der einzelnen Operanden und Operatoren zu tun, sondern einfach mit der Tatsache, dass (wie die Umgangssprache sagt :D) endliche Automaten nicht zählen können.

Ark
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
P RegEx für Zeiten Allgemeine Java-Themen 7
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
M Regex für Zahleneingabe in JavaFX Textfield Allgemeine Java-Themen 18
P RegEx mit HTML Parser für Java möglich? Allgemeine Java-Themen 10
S regex für einen Link Allgemeine Java-Themen 3
F String für RegEx escapen Allgemeine Java-Themen 8
T RegEx für "{ip}" ? Allgemeine Java-Themen 5
G Regex für Kontaktdaten Allgemeine Java-Themen 2
K Regex für Ergebnisse (9:9, 2:1.) Allgemeine Java-Themen 3
F RegEx bei Hexstring Allgemeine Java-Themen 8
H Frage regex greater than less than Allgemeine Java-Themen 7
N Regex schlägt nicht an Allgemeine Java-Themen 10
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
T regex case insensitive trimmed Allgemeine Java-Themen 6
S Zeichen | in regex Allgemeine Java-Themen 8
X Regex mit mehreren Bedingungen machen Allgemeine Java-Themen 5
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
C Java17 und Regex Allgemeine Java-Themen 13
OnDemand RegEx /compilebekomme nicht die erwarteten Werte Allgemeine Java-Themen 9
N Gierigen Regex in nicht-gierigen umwandeln Allgemeine Java-Themen 4
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
OnDemand Regex von bis Allgemeine Java-Themen 6
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
G Regex Allgemeine Java-Themen 2
L regex ganzer string? Allgemeine Java-Themen 2
MiMa Geldbetrag mit regex ermitteln. Allgemeine Java-Themen 14
W RegEx Stringliteral finden - Jflex Allgemeine Java-Themen 5
D Regex Probleme Allgemeine Java-Themen 2
Kirby.exe Regex charakter ignorieren Allgemeine Java-Themen 12
S Java SAT (Haltbarkeitsproblem) mit Regex Allgemeine Java-Themen 6
S [Regex] Nur diese Zeichen beachten Allgemeine Java-Themen 1
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
S Regex mit UND-Verknüpfung Allgemeine Java-Themen 1
D Regex: Komplettes Wort bekommen Allgemeine Java-Themen 3
P RegEx Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
Y regex | n-faches Vorkommen oder gar keins Allgemeine Java-Themen 6
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
HarleyDavidson Regex - Optimierung Allgemeine Java-Themen 4
T Best Practice Wortregeln RegEx Allgemeine Java-Themen 11
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
H Interpreter-Fehler Regex kompiliert nicht Allgemeine Java-Themen 5
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
Iron Monkey Mit Regex nach Beträge suchen Allgemeine Java-Themen 4
T REGEX Erklaerung Allgemeine Java-Themen 14
T Nur innerhalb des regex-Match ersetzen Allgemeine Java-Themen 9
H Pic Download / Regex Problem Allgemeine Java-Themen 7
F Frage zu Regex möglich Allgemeine Java-Themen 4
M Regex... mal wieder Allgemeine Java-Themen 3
H RegEx - Ersetze alles bis Leerzeichen Allgemeine Java-Themen 5
S regex verbrät CPU Allgemeine Java-Themen 6
V Regex Bereichs Filter Allgemeine Java-Themen 4
127.0.0.1 RegEx _ und 0-9 Allgemeine Java-Themen 45
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
P Java String Regex Allgemeine Java-Themen 2
AyKay Regex XPath Allgemeine Java-Themen 4
C Regex (Case insensitive und Umlaute) Allgemeine Java-Themen 4
D Regex Raute erkennen Allgemeine Java-Themen 2
nrg Zweistelligen Zahlenbereich mit RegEx Allgemeine Java-Themen 8
GilbertGrape Regex-Problem Allgemeine Java-Themen 2
W Denkblockade RegEx Allgemeine Java-Themen 2
S eigene regEx schreiben Allgemeine Java-Themen 4
C Regex expandieren Allgemeine Java-Themen 6
C Regex Überschniedung von Ausdrücken Allgemeine Java-Themen 16
reibi RegEX - Teilstring Allgemeine Java-Themen 6
R Java-RegEx terminiert nicht Allgemeine Java-Themen 3
M Regex: Ich stehe auf dem Schlauch Allgemeine Java-Themen 2
V Kleines Regex-Problem Allgemeine Java-Themen 3
B Regex "Problem" Allgemeine Java-Themen 4
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
J Regex: Fertige URLS aus Javascript Allgemeine Java-Themen 3
N Java regex Allgemeine Java-Themen 5
K Regex JSON Allgemeine Java-Themen 3
J RegEx Ausdruck Allgemeine Java-Themen 2
J Regex: URLS aus CSS Allgemeine Java-Themen 2
G RegEx- Ausdruck Allgemeine Java-Themen 4
G RegEx kein Unterstrich Allgemeine Java-Themen 2
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
X Java String Regex - Sonderzeichen Filtern Allgemeine Java-Themen 5
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
R Java Regex Frage Allgemeine Java-Themen 17
Daniel_L RegEx-Frage: Ersetzen in UBB ausschließen Allgemeine Java-Themen 2
M Große Datei mit Regex durchsuchen Allgemeine Java-Themen 4
E Regex alles nach ? löschen Allgemeine Java-Themen 4
M RegEx-Frage Allgemeine Java-Themen 2
R Regex Tokenizer Allgemeine Java-Themen 11
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
H RegEX und eMail Allgemeine Java-Themen 4
L-ectron-X Regex zum Entfernen von mehrzeiligen Kommentaren Allgemeine Java-Themen 2
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
B Regex-Fehler nach lib-Update Allgemeine Java-Themen 2
K Contrains oder Regex Allgemeine Java-Themen 3
J replaceAll , "[", "]" & regex Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben