Как да редуцирам моето дърво за анализ в абстрактно синтактично дърво?

Какви са общите стратегии за намаляване на дърво за анализ (т.е. конкретно синтактично дърво) в абстрактно синтактично дърво?

Например имам следното граматично правило:

statement_list : statement
               | statement_list statement

което, ако бъде оставено като дърво за анализ, ще генерира разпръскващ изход, който изглежда като

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

Ако свържа децата на всеки възел (тъй като списъкът с изрази няма присъщо значение след анализиране), мога да постигна следното

program
        definition
                p_type
                assignment
        definition
        assign
                assignment

Това работи добре - обаче не съм запознат с никакви "правила" за това. Има ли специфични граматически правила, които трябва да търся да опростя? Въпрос на усещане ли е, или има по-механичен процес?


person sdasdadas    schedule 30.07.2013    source източник
comment
Можете да изберете мек вид и усещане, но това е най-вече много работа. Можете да направите това по същество механично, като премахнете възлите, които можете да регенерирате с помощта на граматиката. Вижте stackoverflow.com/a/1916687/120163   -  person Ira Baxter    schedule 16.07.2014


Отговори (1)


Не е въпрос на "усещане". Едно абстрактно синтактично дърво зависи от значението (семантиката) на това, което е анализирано, и мисля, че това ще бъдат правилата:

  1. Премахнете възли за токени, които не добавят значение. Това са междинни ключови думи (като "тогава"), разделители (като запетая) и скоби (като скоби).
  2. Насърчавайте значими токени (като „ако“) да бъдат родител на други токени в същото правило.

Няма една единствена рецепта. Зависи какво означават фразите на целевия език.

person Apalala    schedule 31.07.2013
comment
Оценявам отговора, но имам чувството, че си противоречиш. Казвате, че това не е въпрос на „усещане“, но вашите правила зависят от езика. Ако имаше някакви показатели, които трябва да се използват, тогава бих се съгласил, че не е въпрос на усещане, но в настоящия момент определено се чувства така. - person sdasdadas; 01.08.2013
comment
Всеки ден ще призная, че дизайнът (особено езиковият дизайн) е 50/50 инженерство/усещане. Това добре ли е? - person Apalala; 01.08.2013
comment
Да, разбира се, съжалявам - забравих да се върна към този въпрос. Благодаря за помощта. - person sdasdadas; 03.08.2013