2016-08-04 7 views
1

Ich habe eine Zeichenfolge mit einer langen bedingten Anweisung, die ich analysieren und in Gruppen/Ausdrücke für die visuelle Darstellung aufteilen muss. Hier ist ein Beispiel für die Quellzeichenfolge ...Split bedingte Anweisung für die visuelle Darstellung. NET

($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4')) 

Ich muss dynamisch diese Zeichenfolge und Gruppen Ausdrücke analysieren zusammen in geeigneter Weise ...

Gruppe1: - ODER

Group1- A: - UND

$ROOT.OPT_CHAR1 IN ('val1') 

$ROOT.OPT_CHAR2 IN ('val2') 

Gruppe1-B: - AN D

$ROOT.OPT_CHAR3 IN ('val3') 

$ROOT.OPT_CHAR4 IN ('val4') 

Jede Hilfe wäre willkommen.

+0

Die Auswertung sollte logischer Ausdruck berücksichtigen Bewertung nicht nur und/oder sondern auch links/rechts Klammer. einfaches Teilen oder Regex ist für ein solches Problem nicht geeignet. Sie müssen einen Parser erstellen. –

+0

Einverstanden. Ich kämpfe mit der Logik der Erstellung eines Parsers. – ClintRhodes

Antwort

0

Die Auswertung des Ausdrucks

($ROOT.OPT_CHAR1 IN ('val1') AND $ROOT.OPT_CHAR2 IN ('val2')) OR ($ROOT.OPT_CHAR3 IN ('val3') AND $ROOT.OPT_CHAR4 IN ('val4')) 

soll, unter Berücksichtigung logischen Ausdruck Auswertung trägt nicht nur UND/ODER sondern auch rechte Klammer Ausdrücke für die Gruppierung links /.

Einfache Aufteilung oder Regex ist nicht für ein solches Problem geeignet. Sie müssen einen Parser erstellen.

einen Parser zu erstellen, starten Sie durch Ihre Grammatiken definieren: Tokens, Regeln ....

Sie ANTLR tool verwenden können, um Ihre Grammatik zu bauen/testen und schließlich C# oder Java-Parser zu erzeugen und aus der Box bekommen gebrauchsfertiger Parser.

Antlr Werkzeug nimmt die Grammatik-Datei als Eingabe und erzeugt zwei Klassen: Lexer und Parser

Zuerst erstellen Sie Token für jeden Betreiber und Klammern:

LPAREN : '(' ; 
RPAREN : ')' ; 
AND : 'AND'; 
OR : 'OR'; 
IN : 'IN'; 

Definieren Sie Ihre Variable wie ROOT.OPT_CHAR1 : sind Namen aus Buchstaben und Ziffern bestehen:

NAME : ('a'..'z' | '0'..'9')*; 

definieren white Spaces: WS: ('' | '\ t' | '\ r' | '\ n');

Schließlich Parser Regeln erstellen.

Details der Struktur Grammer, lesen: Grammar Structure

einfache Anleitung für Antllr Lesen Hilfe Sie Ihren Parser bauen.

+0

Ich habe keine Ahnung, was das ANTLR-Tool ist. – ClintRhodes

+0

ANTLR-Tool ist ein leistungsstarker Parser-Generator, lesen Sie Referenz in meiner Antwort, um Ihre Grammatik zu erstellen und C# Parser zu generieren, der Textdateien basierend auf diesem Grammar verarbeiten kann. Lesen Sie SO http: // stackoverflow.com/questions/1931307/antlr-ist-da-ein-einfaches-beispiel. –