Finalmente comecei a entender a complexidade por trás da criação de um intérprete e um compilador. Criei várias versões do TinyBasic, 1964 (Dartmouth) Basic, e minhas próprias expansões nesses idiomas antes de chegar a esse ponto. O projeto mais recente é o que chamo de Open Source Basic ... porque não conseguia pensar em outros recursos do idioma que interessariam às pessoas. Ser capaz de abrir a fonte do idioma e entender como são feitas algumas coisas complexas (como são feitas a varredura, a análise, a interpretação e a compilação)
O Open Source Basic é interpretado primeiro em um idioma baseado em pilha. Essa linguagem baseada em pilha é então interpretada e executada imediatamente ou transformada em um executável CLR.
Todas as minhas perguntas se resumem a isso:
- Quais são os recursos / construções básicos de uma linguagem baseada em Basic? Eu já tenho essas construções básicas: Atribuições, Expressões, Variáveis, algumas funções (Aleatória, ToUpper, ToLower), Looping (por e fazer enquanto / até), If (bloco e linha única) Decisões Else, entrada baseada em console (Entrada) ) e saída (Imprimir) e sub-rotinas (sem parâmetros ainda).
- Quando termino de adicionar as construções básicas no meu idioma - como devo ramificar? Em que domínio (s)? Em outras palavras, que direção minha linguagem básica de código aberto deve seguir depois que todas as construções genéricas funcionarem?
Obrigado pelo seu tempo,
Dominick
fonte
Respostas:
Minha experiência com o início do BASIC no Commodore [Vic-20, C-64] me deu a impressão de que os números de linha eram um "recurso" essencial do BASIC. Parece que eles não são mais usados em implementações modernas, o que para mim é uma desvantagem, pois minha visão principal do BASIC é como uma linguagem de aprendizado a partir da qual trampolim para outra coisa.
fonte
Definitivamente, um empreendimento nobre, mas acho que suas prioridades foram revertidas.
Sua primeira preocupação deve ser os problemas de "domínio" que seu idioma é direcionado. É por isso que é chamado de "linguagem específica de domínio" em primeiro lugar. Uma DSL é tolerável apenas quando é pequena, simples e muito focada para resolver um conjunto específico de problemas, como uma faca na manteiga.
Depois de identificar o domínio e como seu idioma funcionará no domínio, você pode definir construções ou recursos específicos.
Por fim, pode ser útil considerar se você deseja uma DSL interna ou externa .
fonte
Desenvolvi uma linguagem de script para um aplicativo CAE / FEA e alguns recursos que achei úteis para os usuários finais são: Variáveis locais e globais Matrizes com alocação e expansão dinâmicas Funções com argumentos e passagem de referência Estruturas (tipos definidos pelo usuário) os recursos que você mencionou devem criar uma linguagem bastante poderosa para começar. Então você desenvolverá de acordo com a solicitação do usuário.
fonte
Existem vários recursos que podem ser adicionados ou estendidos se já existir, mas ...
... As linguagens de programação básicas, são muito semelhantes às linguagens de script, e um recurso que muitos perderam ou foram incluídas posteriormente, era o namespace ou módulos.
C, C ++, PHP, Visual Basic, foram iniciados sem módulos / namespaces e adicionados posteriormente.
O próximo pode ser sub-rotinas (procedimentos ou funções que não retornam um valor) e funções (sub-rotinas que retornam um valor especial).
fonte
Há uma boa pergunta no site Stack Overflow sobre recursos para entender os compiladores. Você também pode dar uma olhada na minha página da classe Compiladores .
Dado os recursos que você já construiu, sugiro adicionar três tipos de dados: int, string, booleano. Você precisará fazer três coisas, cada uma mais difícil que a anterior:
Se isso der certo, sugiro trabalhar no escopo (local nas sub-rotinas versus global). Deixe-me saber se você gostaria de alguns conselhos sobre isso.
Boa sorte. E aproveitar!
fonte