6

Minęło kilka lat od mojej nauki języka komputerowego, więc zapomniałem o lepszych punktach BNF i EBNF i nie mam podręcznika obok mnie. W szczególności zapomniałem, jak przekonwertować EBNF na BNF.Konwersja EBNF na BNF

Z tego, co pamiętam, wiem, że jednym z głównych punktów jest przekształcenie { term } w <term> | <many-terms>. Ale nie pamiętam innych zasad. Próbowałem sprawdzić to w Internecie, ale mogę znaleźć tylko linki do pytań dotyczących prac domowych lub mały komentarz na temat konwersji haseł z nawiasami klamrowymi. Nie mogę znaleźć wyczerpującej listy reguł definiujących tłumaczenie.

Odpowiedz

16

proszę zobaczyć poniższy link, zawiera instrukcje dla każdej produkcji, które muszą zostać przekształcone:

http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html

Dla parserami budowlanych (zwłaszcza oddolne) gramatyki BNF jest często lepsze niż EBNF. Ale to łatwo przekształcić EBNF gramatyki BNF:

  • Przekształć każdym powtórzeniu { E } do świeżej non-końcowej X i dodać

    X = ε | X E. 
    
  • Convert każda opcja [ E ] do świeżej nieterminalny X i dodać

    X = ε | E. 
    

    (Możemy konwertować X = A [ E ] B. do X = A E B | A B.)

  • Konwersja każda grupa (E) do świeżej non-końcowej X i dodać

    X = E. 
    
  • Możemy nawet rezygnacji z alternatyw poprzez liczne produkcje z taka sama nieterminalny.

    X = E | E'. staje X = E. X = E'.

+0

Perfect! Dokładnie tego potrzebuję. Ktoś, kogo nigdy nie znalazłem w tym linku! –

+1

Mam teraz 404 na tym łączu ... jakiś pomysł, czy jest gdzieś zaktualizowana wersja? – Steve

+0

Niestety, nie w mojej głowie. Mam nadzieję, że strona wróci. –