Eu estava pensando em gramáticas para linguagens sensíveis a indendências e parece que as gramáticas CF fariam o truque se combinadas com parâmetros. Como exemplo, considere este fragmento para gramática simplificada do Python no formato ANTLR:
// on top-level the statements have empty indent
program
: statement('')+
;
// let's consider only one compound statement and one simple statement for now
statement(indent)
: ifStatement(indent)
| passStatement(indent)
;
passStatement(indent)
: indent 'pass' NEWLINE
;
// statements under if must have current indent plus 4 spaces
ifStatement(indent)
: indent 'if' expression ':' NEWLINE (statement(indent ' ')+)
;
Minha pergunta: esse tipo de gramática (CFG com parâmetros) tem um nome?
Parece que não seria difícil escrever um analisador de descida recursiva para esta gramática (os parâmetros devem ser basicamente analisadores). Quais poderiam ser as dificuldades com essa abordagem?
A adição de parâmetros eleva a classe de idioma suportada acima de livre de contexto?
Respostas:
As gramáticas de afixo ( gramáticas parametrizadas e livres de contexto) foram estudadas extensivamente pelo eminente cientista da computação holandês Cornelis HA Koster , começando com seu artigo de 1962 "Basic English, uma gramática generativa para uma parte do inglês", co-escrito com LGLT Meertens. Em 1970, ele produziu um formalismo do conceito; uma visão geral útil está disponível em seu artigo de 1971, "Affix Grammars for Programming Languages", cuja versão encontrei no Citeseer .
Nesse artigo, Koster compara seu formalismo (e outro semelhante) com gramáticas de dois níveis de Van Wijngaarden e as considera muito semelhantes.
A bibliografia anotada inestimável de Dick Grune sobre técnicas de análise inclui um grande número de outras referências úteis para gramáticas de afixação e outros formalismos não-Chomskyianos. (Consulte a seção 18.2.6 da bibliografia, embora existam artigos úteis em outras seções.) Grune aborda gramáticas de afixos brevemente no §15.3.2 da segunda edição de Técnicas de análise: um guia prático (e ainda mais brevemente na primeira edição). , disponível on-line) mencionando o fato de que é fácil adaptar as técnicas de análise de cima para baixo (e outras).
Koster, que também foi editor do relatório Algol 68, foi o desenvolvedor original da Compiler Description Language (CDL) , com base em suas idéias sobre gramáticas de afixação. Este kit de ferramentas e seus derivados posteriores foram utilizados na produção por muitos anos. Esta página , que encontrei com uma pesquisa no Google e cuja permanência não posso garantir, possui links para o manual e o site de download do CDL3.
fonte
Tome o lema de bombeamento para CFGs :
Pegue a gramática
Isso descreve um triângulo estelar:
Não há como dividir um triângulo estelar em 5 partesu v w x y de tal modo que { u vnw xny| n>0} também é um triângulo estelar (com v x não vazio).
Isso significa que o triângulo estelar não é uma linguagem livre de contexto.
Ou um exemplo mais simples:
Isso descreve o idioma{ bna bna bn| n≥0} que não é livre de contexto.
fonte
Eu nunca vi esse formalismo apresentado (mesmo em algo como as Técnicas de Análise de Grune ), dependendo dos detalhes de como você define exatamente "os parâmetros devem ser basicamente analisadores", parece mapeado para van Wijngaarden duas gramáticas de nível, que têm o mesmo poder que gramática irrestrita da estrutura de fase (ou seja, mais poderosa que sensível ao contexto, você pode escrever uma gramática VW que fornece todos os programas de interrupção).
fonte