2017-03-31 1 views
0

Ich möchte eine Domain Specific Language (DSL), die Strukturen definieren/kaskadierten wie dieseWie definiere ich strukturierte Datentypen im Grammar-Kit?

ROOT 
    NAME "my dsl" 
    TODO 
    DESC "foo" 
    END 
    TODO 
    DESC "bar" 
    END 
END 

Für mein Verständnis es die folgenden Regeln benötigt:

  • ROOT und To-do-Objekte mit zu beginnen hat ihr Schlüsselwort und enden mit einem END.
  • ROOT muss ein NAME-Attribut haben.
  • TODO muss eine DESC Attribut
  • TODO 0..n mal in ROOT ist haben

Wie kann ich solche ruleset in einer BNF auszudrücken?

Antwort

0

Basierend auf der Custom Language Support Tutorial (einfache Sprache) funktioniert das folgende BNF-Snippet für mich.

{ 
    tokens=[ 
    space='regexp:[\s\n]+' 
    string="regexp:'.*'" 
    ] 
} 

simpleFile ::= 'ROOT' space nameAttr space (todoObj space)+ 'END' 
nameAttr ::= 'NAME' space string 

todoObj ::= 'TODO' space descAttr space 'END' 
descAttr ::= 'DESC' space string 
Verwandte Themen