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?
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 –