Descrição abstrata do problema
Do meu ponto de vista, analisar significa criar um fluxo de token a partir de um AST, que quando analisado novamente produz um AST igual, ou seja, parse(unparse(AST)) = AST
deve ser mantido.
É o mesmo que encontrar uma árvore de análise válida que produziria o mesmo AST.
A linguagem é descrita por uma gramática atribuída a S sem contexto, usando uma variante do eBNF.
Portanto, o analisador precisa encontrar um 'caminho' válido através dos nós percorridos, nos quais todas as restrições gramaticais são mantidas. Isso significa basicamente encontrar uma alocação válida de nós AST para regras de produção gramatical. Este é um problema de satisfação de restrição (CSP) em geral e pode ser resolvido, como análise, retornando em .
Felizmente para a análise, isso pode ser feito em usando GLR (ou melhor, restringindo a gramática). Como a estrutura AST é tão próxima da estrutura de regras de produção gramatical, fiquei realmente surpreso ao ver uma implementação em que o tempo de execução é pior do que analisar: o XText usa o ANTLR para analisar e retornar para não analisar.
Questões
- Uma gramática de atributo S sem contexto é tudo o que um analisador e analisador precisa compartilhar ou existem outras restrições, por exemplo, na técnica de análise / implementação do analisador?
- Eu tenho a sensação de que esse problema não é em geral - algum gênio poderia me ajudar com isso?
Não recebi uma resposta para esta pergunta no StackOverflow . Foi sugerido perguntar aqui, mas eu odeio redundância, então espero que você me perdoe por pedir que responda aqui .