PDA

View Full Version : RegEx, um RPG Fixed Form zu erkennen



Seiten : [1] 2

Ranger
18-03-21, 10:00
Hallo zusammen,

hat schon mal jemand die Quelle eines RPG-Programms gelesen und per Regulärem Ausdruck validiert, ob es sich je Zeile um Fixed-Form-Programmierung handelt?

Falls ja, wie lautet der Regular Expression Ausdruck?

Fuerchau
18-03-21, 10:41
Ich glaube, dafür benötigst du kein Regex.
Fixedform hat immer in Spalte 5 einen Buchstaben.
Total Free muss am Anfang der Quelle ein **FREE enthalten.

Ansonsten kann seit V7R3 zwischen free und fixed ohne free/endfree beliebig gewechselt werden.
Steht also in Spalte 5 ein bekannter Buchstabe ist es eine fixed Zeile.

BenderD
18-03-21, 11:43
Ich glaube, dafür benötigst du kein Regex.
Fixedform hat immer in Spalte 5 einen Buchstaben.
Total Free muss am Anfang der Quelle ein **FREE enthalten.

Ansonsten kann seit V7R3 zwischen free und fixed ohne free/endfree beliebig gewechselt werden.
Steht also in Spalte 5 ein bekannter Buchstabe ist es eine fixed Zeile.

ds... ds... ds... Die Kartenart wird immer in Spalte 6 abgelocht, in Spalte 7 darf man noch ein '*' ablochen, der die ganze Karte zum Kommentar macht und ansonsten darf da nur was stehen, wenn man eine **FREE Karte als erste Lochkarte hat.

D*B
PS: sicher kann man das auch mit Regenechsen machen, vielleicht gibt es aber euch eine SQL Table Function dafür, das wäre eh' moderner.

Ranger
18-03-21, 11:56
Ich glaube, dafür benötigst du kein Regex.
Fixedform hat immer in Spalte 5 einen Buchstaben.
Total Free muss am Anfang der Quelle ein **FREE enthalten.


Danke für den Input.
ich bin zunächst auch so pragmatisch an die Sache ran gegangen und habe dann gemerkt, dass abhängig der Benennung von Variablen/Prozeduren und entsprechend "unglücklicher" Einrückung an besagter Stelle ein bekannter Buchstabe stehen kann, obwohl es kein fixed ist.
Deswegen kam ich auf den RegEx gedanken

Fuerchau
18-03-21, 13:34
Dann kannst du dir je "Karte" ein Muster ja bauen, dass allerdings sich nur um die Bereiche der zwingenden Leerzeichen kümmern muss.
Bei der H-Zeile hast du schon gelitten.

Wofür benötigst du das denn? Willst du einen Compiler schreiben?

@D*B
Man kann ja schon mal die falsche Taste treffen;-).

BenderD
18-03-21, 14:13
... entweder ist die erste Lochkarte **FREE, dann darf man keine fixed Lochkarten in den Stapel packen oder man darf in Spalte 6 nur für fixed was rauslochen, wenn nicht in Spalte 7 ein Kommentar-* abgelocht ist. Oder ist mir da eine Änderung entgangen???

Fuerchau
18-03-21, 14:18
Ja, **FREE scheint man nicht mehr zu benötigen.
Bei einem Kunden von mir steht nicht immer **FREE am Anfang, dann kann man altes und neues Format lustig mischen.
Bei **FREE ist allerdings das alte Format nicht mehr erlaubt.

BenderD
18-03-21, 14:26
Ja, **FREE scheint man nicht mehr zu benötigen.
Bei einem Kunden von mir steht nicht immer **FREE am Anfang, dann kann man altes und neues Format lustig mischen.
Bei **FREE ist allerdings das alte Format nicht mehr erlaubt.

... **FREE hebt nur die Verträglichkeits-Restriktionen mit fixed auf (eben genau der Schutz von Spalte 6/7, der unsägliche rechte Kommentar-Rand und die Breitenbegrenzung)

Ranger
18-03-21, 14:30
Wofür benötigst du das denn? Willst du einen Compiler schreiben?
Nein, ich versuche die Komplexität zu berechnen, zu visualisieren und darzustellen, worauf beim Testen einer Änderung geachtet werden könnte, um negative Seiteneffekte zu verringern.


Dann kannst du dir je "Karte" ein Muster ja bauen...
Das mach ich bereits, steht' aber bei der Mischung aus free und fixed vor der Herausforderung, dass Elemente falsch interpretiert werden

Fuerchau
18-03-21, 14:41
Das wird sich auch nicht ändern, da z-B. eine D-Zeile leer sein kann oder nur einen Namen enthält.
Dies könnte auch der Name einer dcl-x sein, der zufällig da steht.


dcl-s
DasFeld
char(10);

In der C-Karte siehts ja nicht anders aus.


C eval Feld1 = Feld2
eval Feld1 = Feld2;

Herausfinden kann man das nur, wenn man die Zeilen davor und die folgenden berücksichtigt, also eine Kontext-Evaluierung versucht.

Da kannst du mal sehen, welche Leistung ein Compiler macht.

Dein Problem bei Regex ist, dass Regex von variablem Text ausgeht.
Somit musst du Alternativen beschreiben die die Varianten einer D-Karte darstellen.
Oder eben die Karten als DS definieren und die Inhalte auf Fixformat prüfen, also ganz ohne Regex.