Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
---- formale Sprachen (http://www.informatikerboard.de/board/board.php?boardid=12)
----- Kontextfreie Grammatik definieren (http://www.informatikerboard.de/board/thread.php?threadid=3353)


Geschrieben von InformaTiger am 07.12.2016 um 10:56:

  Kontextfreie Grammatik definieren

Guten Tag,

ich arbeite derzeit an einer Grammatik für eine neue Sprache "JLLF", welche den Zweck haben soll Funktionssignaturen darzustellen. Ich habe allerdings keine Erfahrung mit EBNF welche ich zum Definieren meiner Sprache verwendet habe. Mein Lösungsansatz sieht derzeit so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
digit := "0" | "1" | "2" | "3" | "4" | "5" | "6"
       | "7" | "8" | "9" ;
letter := "a" | "b" | "c" | "d" | "e" | "f" | "g"
       | "h" | "i" | "j" | "k" | "l" | "m" | "n"
       | "o" | "p" | "q" | "r" | "s" | "t" | "u"
       | "v" | "w" | "x" | "y" | "z" | "A" | "B"
       | "C" | "D" | "E" | "F" | "G" | "H" | "I"
       | "J" | "K" | "L" | "M" | "N" | "O" | "P"
       | "Q" | "R" | "S" | "T" | "U" | "V" | "W"
       | "X" | "Y" | "Z" ;
under_score := "_" ;
ident := under_score | letter, { ( digit | letter ) } ;
visibility := "public" | "protected" | "private"
           | "internal" ;
variability := "static" | "const" | "final" ;
behaviour := "synchronized" | "volatile" | "native" ;
modifier := visibility | variability | behaviour
         | "abstract" | "weak" | "unowned"
         | "owned" ;
primitive := "byte" | "int" | "int8"
          | "int16" | "int32" | "int64"
          | "uint" | "uint8" | "uint16"
          | "uint32" | "uint64" | "float"
          | "double" | "short" | "long"
          | "char" | "string" | "bool"
          | "boolean" | "size_t" | "ssize_t"
          | "time_t" ;
param := primitive | ident, ident ;
stmt := visibility, [ variability ], primitive | "void" | ident, ident, "(", { param, "," }, ")" ;


Was mir noch fehlt ist eine Definition von "derived data types" und mein Beispiel berücksichtigt auch nicht den Fall dass eine Funktion/Methode abstract sein kann oder bestimmte Modifizierer mehrfach vorkommen können. unglücklich

Wie könnte ich das korrekt formulieren?

Edit: im Anhang ein Beispiel, wie ich mir die fertige Sprache konkret vorstelle.

Mit freundlichen Grüßen
InformaTiger


Forensoftware: Burning Board, entwickelt von WoltLab GmbH