Estou aprendendo a criar analisadores usando gramáticas, mas fiquei preso tentando expressar comentários, porque eles podem aparecer em quase qualquer lugar.
Isso indica que os comentários podem ser removidos do fluxo de token antes da análise.
Essa é a prática padrão ou os comentários são sempre / frequentemente especificados em gramáticas?
Respostas:
É muito comum tratá-lo como uma forma de espaço em branco. Muito da mesma maneira que as novas linhas em idiomas orientados a ponto e vírgula como C.
Uma vez que é alguma forma de espaço em branco, você freqüentemente a ignora mais alto no analisador.
fonte
Eles geralmente não são.
Eles são removidos pelo lexer, quando o código-fonte é transformado de caracteres em tokens.
Em seguida, o analisador receberá tokens e criará um AST. Quando o analisador faz seu trabalho, os comentários já desaparecem, para que eles não precisem aparecer na gramática.
fonte
Resposta rápida e curta
Sim, é a prática padrão, detectar comentários no "lexer" ou no "parser"
Às vezes, o "analisador" possui um "lexer" interno ou é misturado ao "analisador" como uma única ferramenta ("lexer-parser").
Resposta estendida
Eu apenas estou trabalhando nesse caso.
A maioria dos "scanners" (também conhecidos como "tokenizers" ou "lexers") detecta comentários, mas é removida ao retornar tokens para o "analisador".
Às vezes, uma linguagem de programação, usa alguns comentários com um significado especial, como "diretivas do compilador" ou "documentação".
Exemplo de comentário padrão:
Exemplo de comentário da diretiva:
Comentário para o gerador de documentação Exemplo:
A maioria das ferramentas relacionadas ao compilador detecta esses comentários especiais, com um analisador ou pré-processador, que não é o lezxer ou analisador principal, e ainda possui um lexer pequeno.
Felicidades.
fonte
Alguns analisadores que retêm comentários e / ou entradas ilegais no AST os adicionam como propriedades a todos os nós do AST.
Você pode dar uma olhada no projeto Microsoft Roslyn, que faz isso se bem me lembro.
fonte