Qual API é necessária para conclusão de código / realce de sintaxe / recursos IDE semelhantes?

5

Tenho desenvolvido um pouco de linguagem em meu próprio tempo e tenho um protótipo bastante básico que implementa alguns dos recursos mais básicos. Agora estou olhando para o aumento de escala e não quero cometer um erro arquitetônico desagradável no qual preciso refatorar tudo para oferecer suporte a esses recursos. Então, eu gostaria de saber sobre os principais recursos da API necessários. Agora, eu tenho

O lexer pode operar em qualquer buffer de entrada usando iteradores, os tokens estão disponíveis para inspeção antes de passar para o analisador, e eu também forneço um gancho para comentários.

O analisador pode operar em qualquer fluxo de token (não codificado para o meu lexer), e a construção AST pode ser trocada. Eu também anotei meu AST com informações de localização. Além disso, o AST está prontamente disponível para inspeção antes da análise.

Finalmente, muitos dos recursos de análise são avaliados com preguiça, por isso é fácil obter sua representação semântica a partir da AST. Mas não tenho certeza de quais recursos essas representações semânticas precisam estar prontamente disponíveis para tais esforços.

Alguma sugestão sobre o que é necessário a este respeito?

    
por DeadMG 08.03.2013 / 15:23
fonte

2 respostas

1

Para exemplos de qual funcionalidade pode ser oferecida, consulte Usando o Clang como uma biblioteca . A correspondência de AST da Clang usa modelos e macros em C ++, o que faz com que pareça exemplos diferentes de compiladores em ML ou Haskell. Considere este exemplo que "capturará todas as instruções for que definem uma nova variável inicializada em zero. "

StatementMatcher LoopMatcher =
  forStmt(hasLoopInit(declStmt(hasSingleDecl(varDecl(
    hasInitializer(integerLiteral(equals(0)))))))).bind("forLoop");
    
por 09.03.2013 / 19:41
fonte
1

Com relação ao título de sua pergunta: "Qual API é necessária para o preenchimento de código / realce de sintaxe / recursos IDE semelhantes?", pode ser útil verificar o Qt Creator Development Suite se você deseja desenvolver seu próprio IDE. O Qt permite a implementação de software de plataforma cruzada e suporta muitos dos recursos listados acima (conclusão de código, realce de sintaxe, etc.). Não tenho certeza se é isso que você estava procurando, mas entre a manchete da pergunta e a descrição da pergunta fiquei um pouco confuso.

    
por 20.03.2013 / 15:45
fonte