2016-04-22 10 views
0

Ich habe eine SQL-2003 ANTLR4 Grammatik für das Projekt DeveelDB entwickelt: Dies definiert die wichtigsten SQL-Anweisungen für seine grundlegenden Funktionen.Überschreiben Sie eine Regel in ANTLR4 Grammatik

Wir entwickeln jedoch auch eine Reihe externer Bibliotheken, um die Funktionen der Datenbank zu erweitern: zum Beispiel a XML module, die die Analyse von XML-Daten einer Spalte oder a Open-GIS SFS module unterstützt, um räumliche Operationen zu unterstützen.

Angesichts der Architektur des Systems ist es einfach, alle Operationen mit Systemfunktionen zu erledigen, die bei der Systemerstellung registriert sind, und der SQL-Parser kann damit reibungslos arbeiten.

Meine Frage betrifft die Möglichkeit, eine neue ANTLR4-Grammatik zu definieren, die von der vorhandenen SQL-Grammatik im Hauptprojekt ableitet und einzelne Regeln neu definiert, um merkmalspezifische Befehle einzuschließen, anstatt sie in der Hauptgrammatik zu definieren Kopieren und fügen Sie die .g4-Grammatik in das Modulprojekt ein und definieren Sie die Regeln direkt dort neu.

Vielen Dank für Anregungen!

Antwort

1

Art der "Vererbung" ist möglich. Einfach das Stichwort "importieren" nachschlagen. Beispiel aus dem antlr4 Buch: "Eltern Grammatik"

grammar ELang; 
stat : (expr ';')+ ; 
expr : INT ; 
WS : [ \r\t\n]+ -> skip ; 
ID : [a-z]+ ; 

"Kind" Grammatik

grammar MyELan 
import ELang; 
expr : INT | ID ; 
INT : [0-9]+ 

was tatsächlich passiert ist

grammar MyELang; 
stat : (expr ';')+ ; 
expr : INT | ID ; 
INT : [0-9]+ 
WS : [ \r\t\n]+ -> skip ; 
ID : [a-z]+ ; 

und ein Zitat aus dem gleichen Buch MyELang inherits rules stat, WS, and ID, but it overrides rule expr and adds INT.

Der Rest Sie in dem Buch unter Abschnitt 15.2 Grammatik Struktur, Untertitel Grammatik Importe aussehen kann.

+0

Danke: das beantworte meine Frage. Ich werde das ausprobieren. In der Tat, ich verwende bereits Grammatikvererbung und Lexer-Import, aber ich habe nie versucht, eine Regel zu überschreiben – Antonello

+0

Sie sind willkommen, lassen Sie mich wissen, wenn (wenn es funktioniert). – cantSleepNow