Gibt es ein Dienstprogramm, das mit einer ANTLR-Grammatik übereinstimmende Strings erzeugt?

9

Ich habe eine ANTLR-Grammatik und möchte meinen Parser fuzz machen.

    
Jerome B 07.08.2010, 06:15
quelle

3 Antworten

1

Suchen Sie nach einer Generation aus einer CFG-Grammatik? Ie. die Erzeugung von Strings, die von der Grammatik akzeptiert werden? Dies könnte eine gute Idee sein, um auf Grammatikkorrektheit zu prüfen, aber bedenke, dass die Menge der akzeptierten Strings höchstwahrscheinlich unendlich ist. Irgendwelche wirklich schlechten Bugs sollten bereits in der Grammatikspezifikation und hoffentlich durch die Überprüfung von LL-ness offensichtlich sein.

Ich kenne kein Werkzeug in der ANTLR-Welt, noch hat eine schnelle Google-Suche nach (E) BNF-Generation irgendetwas Nützliches ergeben.

Es ist jedoch nicht sehr schwierig, einen eigenen Generator zu betreiben, wenn Leistung und dergleichen kein Problem darstellen. Prolog würde mir in den Sinn kommen, es gibt eine Menge Literatur zur Verfügung, aber wenn du Java nicht verlassen willst, dann vermute ich, dass Homebrewing der richtige Weg ist. Es macht trotzdem Spaß.

    
Johan Benum Evensberget 08.08.2010 13:32
quelle
0

Nehmen Sie an, Sie generierten Sätze (Zeichenfolgen) aus Ihrer ANTLR-Grammatik. Warum denkst du, dass dein ANTLR-basierter Parser gegen sie protestieren würde?

Was Sie wirklich tun müssen, ist, nicht ganz legale Strings zu erzeugen. Also, was Sie brauchen, ist ein Generator, der fehlerhafte Zeichenfolgen produzieren kann.

Da ANTLR eine Reihe von Prozeduren aus Ihrer ANTLR-Grammatik generiert, wäre es wahrscheinlich schwierig, einen Satzgenerator mit dem generierten Parser zu erstellen. Was Sie brauchen, ist das explizite Modell der Grammatik. Und dies steht Ihnen bereits zur Verfügung: die ANTLR Eingabe Grammatik.

Eine zusätzliche Komplikation, die ich sehe, ist die Generierung von legalen Tokens aus den Regexen, aus denen die Token-Definitionen bestehen. Auch hierfür müssten Sie die ANTLR-Eingabe verarbeiten.

Die Verarbeitung scheint technisch einfach zu sein. Die beste Engine, die als Grundlage verwendet wird, ist wahrscheinlich das ANTLR-Frontend, das offensichtlich ANTLR-Spezifikationen analysiert und daher eine Darstellung des ANTLR-Inputs enthalten muss.

    
Ira Baxter 10.08.2010 00:44
quelle
0

War auf der Suche nach etwas ähnlichem und fand GramTest , was passend zu sein scheint, aber anstelle von ANTLR benutzt die Grammatik BNF-Grammatik als Eingabe .

  

Mit diesem Tool können Sie Testfälle basierend auf beliebigen Benutzern generieren   definierte Grammatiken. Die Eingabegrammatik ist in BNF-Notation angegeben.   Zu den möglichen Anwendungen gehören Fuzzing und automatisiertes Testen.

Für weitere Hintergrundinformationen verlinken sie zu den folgenden Blogposts:

spoorcc 09.11.2016 17:06
quelle

Tags und Links