5

Jakie są ogólne strategie zmniejszania drzewa analizy (np. Konkretnego drzewa składni) do drzewa składni abstrakcyjnej?Jak zmniejszyć drzewo składni do abstrakcyjnego drzewa składni?

Na przykład mam następującą regułę Gramatyka:

statement_list : statement 
       | statement_list statement 

które, jeśli nie jako drzewo parsowania, wygeneruje wachlując wyjście, które wygląda jak

program 
     statement_list 
       statement_list 
         statement 
           definition 
             p_type 
             assignment 
       statement 
         definition 
     statement 
       assign 
         assignment 

Gdybym złączyć dzieci każdy węzeł (ponieważ lista instrukcji nie ma żadnego znaczenia po analizie), mogę uzyskać następujące wartości:

program 
     definition 
       p_type 
       assignment 
     definition 
     assign 
       assignment 

To zadziałało dobrze - nie jestem jednak zaznajomiony z żadnymi "regułami" do robienia tego. Czy są jakieś szczególne zasady gramatyczne, które powinienem chcieć uprościć? Czy to kwestia czucia, czy też jest bardziej mechanistyczny proces?

+1

Możesz przejść do squishy "wyglądać i czuć", ale to głównie dużo pracy. Możesz to zrobić w sposób mechaniczny, usuwając węzły, które można regenerować za pomocą gramatyki. Zobacz http://stackoverflow.com/a/1916687/120163 –

Odpowiedz

3

To nie jest kwestia "odczuwania". Streszczenie drzewa składni zależy od znaczenia (semantyki) tego, co zostało przeanalizowane, i myślę, że będą to zasady:

  1. Usuń węzły dla tokenów, które nie dodają znaczenia. Są to słowa kluczowe pośrednie (np. "Wtedy"), separatory (np. Przecinek) i nawiasy (jak nawias).
  2. Promuj znaczące tokeny (np. "Jeśli"), aby być rodzicem innych tokenów w tej samej zasadzie.

Nie ma jednego przepisu. Zależy to od tego, co oznaczają wyrażenia w języku docelowym.

+0

Doceniam odpowiedź, ale czuję się, jakbyś się zaprzeczał. Mówisz: "To nie jest kwestia" czuć ", ale twoje zasady zależą od języka. Gdyby istniały pewne wskaźniki, to zgodziłbym się, że nie jest to kwestia czucia, ale jak to się dzieje, na pewno tak się czuje. – sdasdadas

+0

Przyznam się każdego dnia, że ​​projektowanie (w szczególności projektowanie języków) to technika 50/50. Czy to jest dobre? – Apalala

+0

Tak, oczywiście, przepraszam - zapomniałem wrócić do tego pytania. Dzięki za pomoc. – sdasdadas

Powiązane problemy