Variablen C Expression Validator

DKing

Mitglied
Hi,
ich bin auf der Suche nach etwas sehr speziellem und vieleicht gibt es hier jemand der Erfahrungen in dem Bereich hat bzw. eine gute lib kennt.

Ich suche einen C Expression Validator. Dieser soll erkennen, das z.B. der String: "((x / (2 + z))" bzw. ((1 / (2 + 1)) ein valider Ausdruck ist.

Gibt es da irgendetwas, was mir solche Arbeit abnimmt?

Danke schon mal im Vorraus.

Grüße
DKing
 

DKing

Mitglied
Ja sowas in der Richtung :), danke schon mal. Damit lässt sich auf jeden Fall erstmal etwas anfangen. Hat noch jemand Erfahrungen in dem Bereich?
 

HoaX

Top Contributor
Kannst dir ja auch einen Parser mit einem der vielen Parsergeneratoren erzeugen lassen, oder wenn du was lernen willst selbst einen scheiben. Nur die Syntax prüfen ist nicht so schwer.
 

DKing

Mitglied
Ja, einen eigenen Parser schreiben wäre natürlich eine Lösung, jedoch ist das Ziel eher schnell etwas lauffähiges zuhaben, da der Zeitmangel enorm ist.
Du hast von Parsergeneratoren gesprochen, einen solchen habe ich noch nicht benutzt. Da ich ja z.B. die Anzahl der Klammern zählen muss, würde eine regulärer Ausdruck in diesem Fall nicht ausreichen, ich würde also wahrscheinlich mit einer kontextfreien Grammatik zum gewünschten Ziel kommen.

Kannst du da irgendeine Bibliothek empfehlen?

Im Grunde brauche ich nur eine lib mit der ich eine kontextfreie Grammatik definieren kann.

Hat sonst noch jemand weiter Vorschläge?

Gruß
DKing
 
Zuletzt bearbeitet:

DKing

Mitglied
Dankeschön!
Habe mir nun den ganzen Morgen mal ANTLR angeschaut. Ich habe dort folgende Grammatik zusammengebaut:
Code:
expressionGrammar:   expr+;
               
expr
    :   multExpr
        (   '+' multExpr
        |   '-' multExpr
        )*
    ;

multExpr
    :   atom ('*' atom)*; 

atom
    :   INT | ID | '(' expr ')';

ID  :   ('a'..'z'|'A'..'Z')+ ;
INT :   '0'..'9'+;
WS  :   (' '|'\t')+;


Habe mir den Code generieren lassen, bin aber etwas ratlos wie ich genau nun dagegen validieren kann. Der String 12ab dürfte ja fehlschlagen im Gegensatz zu (1+2*3).

Habe schon im Internet nach einer Lösung gesucht, war jedoch nicht erfolgreich. Hat vieleicht jemand einen Codeschnipsel für mich, der funktioniert und an dem ich mich orientieren kann?

Grüße
DKing
 

HoaX

Top Contributor
Schau dir doch mal den Code vom generierten Lexer an. Dem kannst du iirc im Kontruktor einen String übergeben welcher verarbeitet wird. Um die Verarbeitung zu starten musst du die zur Startregel gehörende Methode aufrufen. Bei also mExpressionGrammar() oder so.

Edit eben probiert: Starte mal den Debugger von Antlr, dann wird dir eine __Test__.java erzeugt, da siehst du dann wie man den erzeugten Code verwendet.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
J Regular Expression Allgemeine Java-Themen 16
RalleYTN Expression Crawling Allgemeine Java-Themen 5
H Regular Expression Allgemeine Java-Themen 11
M Regular expression Allgemeine Java-Themen 5
B Regular Expression und Matcher Allgemeine Java-Themen 3
MrMilti Gruppenreferenz in einer Regular Expression Allgemeine Java-Themen 3
S Java Regular Expression Allgemeine Java-Themen 2
J Expression Language für mathematische Ausdrücke Allgemeine Java-Themen 8
G Parameterauswertung mit regular Expression Allgemeine Java-Themen 3
M Java Regular Expression für Mathe-String (= 2+4*3+2) Allgemeine Java-Themen 7
G Regular Expression Allgemeine Java-Themen 8
D Regular Expression Mit Punkt und Zahl Allgemeine Java-Themen 4
T Regular Expression mit n Gruppen Allgemeine Java-Themen 6
S Syntax Error, insert "AssignmentOperator Expression&amp Allgemeine Java-Themen 3
M Regular Expression Allgemeine Java-Themen 2
R Regular expression für '.' Allgemeine Java-Themen 7
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
H Swing Validator Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben