Meine Grammatik ist gegeben durch:Xtext: Wie Code zu formatieren, wo Block eingerückt werden muss
Model:
'module' (mn=ID)?
(func+=Function)+
'end_module'
;
Function:
'function' name=ID '('')'
(vars+=ID)*
'end_function'
;
kann ich das Token wie 'Funktion' finden, '(' usw.
- Wie Kann Wenn eine neue Zeile nach dem Token "Modul" erzwingen, wenn die optionale Daten-MN nicht existiert und nach Mn, wenn es existiert?
- Wie kann ich die Block beginnen 'Modul' und 'End_Module' sowie 'Funktion einrücken 'und' Ende_Funktion '?
Die Formatierung Ich suche:
module test
function fdf()
str1
str2
end_function
function ff()
end_function
end_module
Bisher habe ich die Formatierungs Stubs erzeugen, indem Sie: Formatter = { generateStub = true }
Ja, es hilft sehr. Ich muss den Code von Hand formatieren. wie muss der body von 'format (Model, extension IFormattableDocument)' aussehen um automatische Formatierung zu machen? – Johan
Sie können das Beispielprojekt 'Home Automation language' von Xtext zusammen mit der Dokumentation über Whitespace-Aware Languages (in der obigen Antwort verlinkt) betrachten. Ich empfehle Ihnen, mit der Arbeitsablaufdatei (.mwe2) zu beginnen, um zu verstehen, wie Sie einen benutzerdefinierten Formatiererstub generieren. Dann enthalten 'org.eclipse.xtext.example.homeautomation.formatting2.RuleEngineFormatter' und 'org.eclipse.xtext.example.homeautomation.parser.antlr' die tatsächliche Implementierung, die Sie für Ihre Sprache anpassen müssen. –
In dem Beispiel 'RuleEn gineFormatter' verwendet' org.eclipse.xtext.example.homeautomation.ruleEngine.Declaration', aber mein Projekt erstellt keine ähnlichen Dateien. Alle zugehörigen 'org.eclipse.xtext.example.homeautomation.ruleEngine. *' Fehlen in meinem Projekt. – Johan