Vorschlag: Sammelthread für Reguläre Ausdrücke

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

@ TS-Soft:
Nachegrüstet, fehlt noch was?

@edel
edel hat geschrieben:(?i)^\s*procedure(dll|cdll|c|)(|\.\w+) +\w+\(.*\)
Das ist falsch, hier können nur bestimmte Buchstaben stehen:
[bcwlqdfs] wäre hier richtig.

Das + stimmt auch nicht, sondern {1}.

> eine procedure muss immer mit endprocedure enden, daher reicht es wenn du nur die erste Zeile ueberpruefst
Und wenn der übergebene String kein EndProcedure enthält? Was machste dann?

Alle Pflichtbestandteile einer Prozedur müssen auch auch ihr Vorhandensein geprüft werden. Optionale Fragmente wie ".l", ".s" oder Parameter in Klammern können überprüft werden, um die Genauigkeit der Überprüfung zu erhöhen, wenn diese vorhanden sind.

@ edel:
Am Ende fehlt ein "$", weil sonst würde er bei dir auch Müll nach dem vermeintlichen EndProcedure als gültig ansehen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

AND51 hat geschrieben: @edel
edel hat geschrieben:(?i)^\s*procedure(dll|cdll|c|)(|\.\w+) +\w+\(.*\)
Das ist falsch, hier können nur bestimmte Buchstaben stehen:
[bcwlqdfs] wäre hier richtig.

Das + stimmt auch nicht, sondern {1}.
Falsch, da kann auch ein Macro stehen.
AND51 hat geschrieben: > eine procedure muss immer mit endprocedure enden, daher reicht es wenn du nur die erste Zeile ueberpruefst
Und wenn der übergebene String kein EndProcedure enthält? Was machste dann?

Alle Pflichtbestandteile einer Prozedur müssen auch auch ihr Vorhandensein geprüft werden. Optionale Fragmente wie ".l", ".s" oder Parameter in Klammern können überprüft werden, um die Genauigkeit der Überprüfung zu erhöhen, wenn diese vorhanden sind.
Ist doch voellig egal was danach kommt. Wenn "Procedure" gefunden
wurde, kann man davon ausgehen das es auch ein "EndProcedure" gibt.
Im Prinzip fuerfte schon das finden von "Procedure" reichen.

Code: Alles auswählen

"^procedure(dll|cdll|c|)\b"
Wenn man den Inhalt moechte, muss man natuerlich alles uebergeben,
aber davon war in deinem Code ja gar nicht die Rede.

AND51 hat geschrieben: @ edel:
Am Ende fehlt ein "$", weil sonst würde er bei dir auch Müll nach dem vermeintlichen EndProcedure als gültig ansehen.
siehe oben
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> Falsch, da kann auch ein Macro stehen
Stimmt, werde das berücksichtigen.

> Wenn "Procedure" gefunden wurde, kann man davon ausgehen das es auch ein "EndProcedure" gibt
Wenn man von allem ausgehen würde, dann wären 95% aller If-Abfragen in Programmen überflüssig. Wozu also CreateFile() auf Erfolg prüfen?
Es ist nun mal Tatsache, dass der String

Code: Alles auswählen

Procedure.s BackMir einen Kuchen

Lang Lebe Litauen
/%)"§
$(§%&$
Lore ipsum und der ganze Kram
EndProtzedur

Hier noch ein bisschen Müll
keine syntaktisch richtige PB-Prozedur ist.


> Im Prinzip fuerfte schon das finden von "Procedure" reichen
Gar nicht wahr, seit es Macros gibt. Was nun? Ich denke, wenn "Procedure", "EndProcedure", ein Prozedurname und Klammern vorhanden sind, dann ist es eine Prozedur. Ansonsten könnte man alles mit Macros kaschieren und trotzdem behaupten, es sei eine Prozedur, was ja u. U. dann auch korrekt ist.


P.S.: Habe nun auch eingebaut, dass Kommentare in PB-Syntax nach "EndProcedure" erlaubt sind!
P.P.S.: Außerdem habe ich eingebaut, dass Prozedurentypen und Prozedurnamen nicht mit einer Ziffer anfangen dürfen. Das wäre syntaktisch inkorrekt.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Um einen Scanner zu schreiben gehoert etwas mehr dazu. Hier wurde
aber nur nach dem Wort "Procedure*" gefragt ...

Aber mal davon ab, folgendes laeuft bei dir nicht :

Code: Alles auswählen

procedure[...]

Code: Alles auswählen

:procedure[...]
Antworten