Frage

Ich versuche, den besten Weg, um herauszufinden, eine GE Logiker MEL-Trace-Datei zu analysieren, um es einfacher zu lesen.

Es hat Segmente wie

>{!gDYNAMIC_3205_1215032915_810 = (clYN)}
execute>GDYNAMIC_3205_1215032915_810 = "Yes, No"
results>"Yes, No" 
execute>end 
results>"Yes, No" 

>{!gDYNAMIC_3205_1215032893_294 = (clYN)}
execute>GDYNAMIC_3205_1215032893_294 = "Yes, No"
results>"Yes, No" 
execute>end 
results>"Yes, No" 

und

>{IF (STR(F3205_1220646638_285, F3205_1220646638_301) == "") THEN "" ELSE (\par\tab fnHeadingFormat("Depression") + CFMT(F3205_1220646638_285, "", "Have you often been bothered by feeling down, depressed or hopeless? ", "B", "\par ") + CFMT(F3205_1220646638_301, "", "Have you often been bothered by little interest or pleasure in doing things? ", "B", "\par ") ) ENDIF}
execute>call STR("No", "No")
results>"NoNo" 
execute>"NoNo" == ""
results>FALSE 
execute>if FALSE
results>FALSE 
execute>call FNHEADINGFORMAT("Depression")
execute>call CFMT("Depression", "B,2")
results>"\fs24\b Depression\b0\fs20 " 
execute>"\r\n" + "\fs24\b Depression\b0\fs20 "
results>"\r\n\fs24\b Depression\b0\fs20 " 
execute>"\r\n\fs24\b Depression\b0\fs20 " + "\r\n"
results>"\r\n\fs24\b Depression\b0\fs20 \r\n" 
results>return "\r\n\fs24\b Depression\b0\fs20 \r\n" 
execute>call CFMT("No", "", "Have you often been bothered by feeling down, depressed or hopeless? ", "B", "\par ")
results>"\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par " 
execute>"\r\n\fs24\b Depression\b0\fs20 \r\n" + "\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par "
results>"\r\n\fs24\b Depression\b0\fs20 \r\n\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par " 
execute>call CFMT("No", "", "Have you often been bothered by little interest or pleasure in doing things? ", "B", "\par ")
results>"\b Have you often been bothered by little interest or pleasure in doing things? \b0 No\par " 
execute>"\r\n\fs24\b Depression\b0\fs20 \r\n\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par " + "\b Have you often been bothered by little interest or pleasure in doing things? \b0 No\par "
results>"\r\n\fs24\b Depression\b0\fs20 \r\n\b Have you often been bothered by feeling down, depressed or hopeless? \b0 No\par \b Have you often been bothered by little interest or pleasure in doing things? \b0 No\par " 

kann ich es durch tun prozedural kriechen, aber nach all dem regexps ich gearbeitet habe, finde ich es schwer, nichts zu glauben, dass es da draußen, die mich die Regeln für das Parsen der Datei in ähnlicher Weise definieren lassen. Bin ich falsch?

War es hilfreich?

Lösung

Erstellen Sie eine Grammatik ANTLR verwenden. Wenn Sie mit C, lex / yacc sind heimisch. ANTLR erzeugt native Parser in Java, Python und .NET. Die Ausgabe sieht aus wie ein repl; versuchen, den Hersteller für eine Spezifikation auf der Eingabesprache zu fragen.

Andere Tipps

Antlr würde den Trick tun.

Falls Sie Perl verwenden für die Analyse. Das Perl-Äquivalent YACC wäre der Parse :: Yapp Modul. Wenn ich eine yacc Grammatik für die Verwendung mit meinem Perl-Code übersetzt, war die Übersetzung meist Mechaniker. Es gibt auch einen rekursiven Abstiegs-Parser-Generator, der langsam, aber leistungsstark: Parse :: RecDescent .

Sie könnten versuchen, ANTLR oder lex / yacc.

Wenn es nach mir ginge, würde ich eine kontextfreie Grammatik ableiten und in einen Parser-Generator anschließen, wahrscheinlich combinator Bibliothek Scala. Allerdings ist diese Grammatik recht einfach aussieht mit der Hand zu analysieren, tragen nur die Automatentheorie im Sinn, und es sollte kein Problem sein.

Ich könnte mir vorstellen, Sie Tools wie LEX verwenden könnte, FLEX, CUP, ANTLR oder YACC (oder deren Äquivalente für was auch immer Programmiersprache Sie verwenden. Alle Mainstream-Programmiersprache etwas Aroma dieser zur Verfügung hat.), Um die Dateien zu analysieren, wenn sie eine spezifische Struktur [genauer gesagt, wenn sie durch eine Grammatik dargestellt werden könnten]. Diese könnten nicht für Feinheiten arbeiten aber.

Es gibt eine Programmiersprache Haskell genannt, die eine große Parsing-Bibliothek haben Sie könnten versuchen. www.haskell.org und http://legacy.cs.uu.nl/daan/ parsec.html für weitere Details

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top