J'ai enfin commencé à comprendre la complexité de la création d'un interprète et d'un compilateur. J'ai construit plusieurs versions de TinyBasic, 1964 (Dartmouth) Basic, et mes propres extensions sur ces langues avant d'arriver à ce point. Le projet le plus récent est celui que j'appelle Open Source Basic ... parce que je ne pouvais penser à aucune autre caractéristique du langage qui intéresserait les gens. Être capable d'ouvrir la source de la langue et comprendre comment certaines choses complexes se font (comment se font la numérisation, l'analyse, l'interprétation et la compilation)
Open Source Basic est d'abord interprété dans un langage basé sur la pile. Ce langage basé sur la pile est ensuite interprété et exécuté immédiatement ou transformé en un exécutable CLR.
Mes questions se résument toutes à ceci:
- Quelles sont les fonctionnalités / constructions de base d'un langage basique? J'ai déjà ces constructions de base: Assignations, Expressions, Variables, certaines fonctions (Random, ToUpper, ToLower), Looping (for and do-while / until), If (block and single-line) Else decisions, console based input (Input ) et de sortie (Print), et des sous-routines (sans paramètres pour l'instant).
- Quand j'ai fini d'ajouter les constructions de base à mon langage - comment devrais-je me diversifier? Dans quel (s) domaine (s)? En d'autres termes, quelle (s) direction (s) mon langage de base open source devrait-il prendre une fois que toutes les constructions génériques fonctionneront?
Merci pour votre temps,
Dominick
la source
Réponses:
Mon expérience avec les premiers BASIC sur le Commodore [Vic-20, C-64] m'a donné l'impression que les numéros de ligne étaient une «caractéristique» de base de BASIC. Il semble qu'ils ne soient plus utilisés dans les implémentations modernes, ce qui est pour moi quelque chose d'un détriment, car ma vision principale de BASIC est comme un langage d'apprentissage à partir duquel se jeter sur autre chose.
la source
Certainement une noble entreprise, mais je pense que vos priorités ont été inversées.
Votre première préoccupation devrait être les problèmes de "domaine" que votre langue est censée résoudre. C'est pourquoi on l'appelle en premier lieu un "langage spécifique au domaine". Une DSL n'est tolérable que lorsqu'elle est petite, simple et très étroitement ciblée pour résoudre un ensemble particulier de problèmes comme un couteau à travers du beurre.
Après avoir identifié le domaine et comment votre langue fonctionnera dans le domaine, vous pouvez définir des constructions ou des fonctionnalités spécifiques.
Enfin, il peut être utile de déterminer si vous souhaitez une DSL interne ou externe .
la source
J'ai développé un langage de script pour une application CAE / FEA et certaines fonctionnalités que j'ai trouvées utiles pour les utilisateurs finaux sont les suivantes: Variables locales et globales Matrices avec allocation dynamique et expansion Fonctions avec arguments et par référence passant Structures (types définis par l'utilisateur) Avec les fonctionnalités que vous avez mentionnées vous-même devraient faire un langage assez puissant pour commencer. Ensuite, vous développerez selon la demande de l'utilisateur.
la source
Il existe plusieurs fonctionnalités qui peuvent être ajoutées ou étendues si elles existent déjà, mais ...
... Les langages de programmation de base sont très similaires aux langages de script, et une fonctionnalité que beaucoup ont manquée ou incluse plus tard, était l'espace de noms ou les modules.
C, C ++, PHP, Visual Basic, ont commencé sans modules / espaces de noms et ont été ajoutés ultérieurement.
Les suivants peuvent être des sous-programmes (procédures ou fonctions qui ne renvoient pas de valeur) et des fonctions (sous-programmes qui renvoient une valeur spéciale).
la source
Il y a une belle question sur le site Stack Overflow sur les ressources pour comprendre les compilateurs. Vous pouvez également consulter ma page de classe Compilers .
Compte tenu des fonctionnalités que vous avez déjà construites, je suggère d'ajouter trois types de données: int, string, boolean. Vous devrez faire trois choses, chacune un peu plus difficile que la précédente:
Si cela se passe bien, je suggère de travailler sur la portée (local dans les sous-routines vs global). Faites-moi savoir si vous souhaitez des conseils à ce sujet.
Bonne chance. Et apprécie!
la source