Como posso fazer o meu próprio compilador C ++ entender modelos, classes aninhadas, etc. características fortes de C ++?

StackOverflow https://stackoverflow.com/questions/618859

Pergunta

É uma tarefa universidade no meu grupo para escrever um compilador de linguagem C-like. É claro que eu estou indo para implementar uma pequena parte do nosso amado C ++.
A tarefa exata é absolutamente estúpido, e o professor nos disse que precisa ser auto-compilable (deve ser capaz de compilar em si) - assim, ele não quis dizer para bibliotecas de uso, como Boost e STL.
Ele também não quer que a gente usar modelos, porque é difícil de implementar.
A questão é - é real para mim, como eu estou indo para escrever este projeto em meu próprio, com o prazo no final de maio - meados de Junho (este ano), para implementar não apenas modelos, mas também aninhados classes, namespaces, funções virtuais mesas ao nível de análise sintática?
PS Eu não sou noobie em C ++

Foi útil?

Solução

Vara para fazer um compilador C.

Acredite em mim, é trabalho duro o suficiente construir um compilador C decente, especialmente , se a sua espera para compilar em si. Tentando suportar todo o C ++ apresenta como classes aninhadas e modelos vai conduzi-lo louco. Talvez um grupo poderia fazê-lo, mas em seu próprio país, eu acho um compilador C é mais do que suficiente para fazer.

Se você está morto conjunto sobre este assunto, pelo menos, implementar um C-como primeira língua (para você ter algo a mão in). Em seguida, foco em exibicionismo.

Outras dicas

"A tarefa exata é absolutamente estúpido" - Eu não acho que você está em uma posição para fazer esse julgamento de forma justa. Melhor para largar essa visão.

"Estou indo para escrever este projeto em meu próprio" - você disse que é um projeto de grupo. Você está dizendo que o seu grupo não quer ir junto com sua opinião de que deve se transformar em C ++, então você está decolando e trabalhando em seu próprio país? Há um outro pouco eu recomendo mudar.

Não importa quão qualificado você está prestes C ++. Sua habilidade com gramáticas, analisadores, lexers, ASTs e geração de código parece muito mais pertinente.

Sem saber mais sobre você ou a atribuição, eu diria que você estaria fazendo bem para ter a atribuição original feito até o final de maio. Isso é três meses de distância. Atenha-se a atribuição. Você pode se surpreender com a sua dificuldade.

Se você terminar mais cedo, e cumprir a sua obrigação de sua equipe, eu diria que você deve sentir-se livre para modificar o que é produzido para adicionar recursos C ++.

Aposto que levou Bjarne Stroustrup mais de três meses para adicionar objetos para C. Não superestime a si mesmo ou subestimar a atribuição original.

Não há problema. E enquanto você está nisso, por que não implementar um sistema operacional para que ele seja executado em demasiado.

Siga a atribuição. Escrever um compilador para uma C-like língua! O que eu faria é selecionar um subconjunto de C. Remova tipos de dados de ponto flutuante e qualquer outro recurso que não é necessário na construção de seu compilador.

Escrevendo um compilador C é um monte de trabalho. Você não será capaz de fazer isso em um par de meses. Escrevendo um compilador C ++ é absolutamente insano. Você não seria capaz de fazer isso em 5 anos.

Eu gostaria de salientar alguns pontos já mencionados e dar algumas referências.

1) Atenha-se aos 1.989 ANSI C padrão com sem otimização.

2) Não se preocupe, com a devida orientação, boa organização e uma boa quantidade de trabalho duro isso é factível.

3) Leia a A Linguagem de Programação C capa a capa.

4) Compreender conceitos importantes do desenvolvimento do compilador do Dragão Book.

5) Dê uma olhada na lcc tanto o código, bem como a < a href = "https://rads.stackoverflow.com/amzn/click/com/0805316701" rel = "noreferrer"> livro .

6) Dê uma olhada na Lex e Yacc (ou Flex e Bison)

7) Escrevendo um compilador C (até o ponto que pode auto compilar) é um rito de passagem ritual entre os programadores. Apreciá-lo.

Para um projeto de classe, eu acho que exigir o compilador para ser capaz de compilar em si é um pouco demais para perguntar. Presumo que isso é o que se entende por estúpido na pergunta. Isso significa que você precisa descobrir com antecedência exatamente quanto de C você está indo para implementar e manter a mesma na construção do compilador. Assim, a construção de uma tabela de símbolos usando primitivos em vez de apenas usando um mapa STL. Isto pode ser útil para um curso de estrutura de dados, mas perde o ponto para um curso de compilador. Deve ser sobre a compreensão das questões envolvidas com o compilador, e chosing que as estruturas de dados para usar, não codificar as estruturas de dados.

Construção de um compilador é uma maneira maravilhosa para realmente entender o que acontece ao seu código uma vez que o compilador obter um porão dele. Qual é a língua-alvo? Quando assumi compiladores, levou 3 de nós todo o semestre para construir um compilador para ir de sorta-pascal para montagem. A sua não é uma tarefa trivial. Sua uma daquelas coisas que parece simples à primeira vista, mas quanto mais você chegar a ele, as coisas mais complicadas começar.

Você deve ser capaz de linguagem C-like completo dentro do prazo. Supondo que você está tomando mais de 1 claro, que é exatamente o que você pode ser capaz de fazer no tempo. C ++ também é factível, mas com muito mais horas extras para colocá-lo. Expecing fazer c ++ funções templates / virtuais é overexpecting si mesmo e você pode falhar na tarefa todos juntos. Portanto, é melhor ficar com um compilador c subconjunto e terminá-lo a tempo. Você também deve considerar o tempo que leva para QA. Se você quer ser QA completa em si também terá bom tempo.

Namespaces ou aninhadas clases, quer funções virtuais estão no nível sintaxe bastante simples, é apenas mais uma ou duas regras para analisador. É muito mais complicado em níveis mais elevados, em decidir, qual a função / classe escolher (sombreamento nome, nomes ambíguos entre namespaces, etc.), ou quando a compilação para bytecode / corrida AST. Então -. Você pode ser capaz de escrever estes, mas se não é necessário, ignorá-lo, e escrever apenas nu modelo funcional

Se você está falando de um compilador completo, com geração de código, então esqueça. Se você só pretende fazer o lado lexical e sintática análise das coisas, então alguma forma de modelagem pode praticamente ser factível no período de tempo, dependendo do que ferramentas de construção de compilador que você usa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top