Question sur la création d'un langage de script

12

Disons, par exemple, que je voulais payer quelqu'un pour créer un langage de programmation ou un langage de script pour moi. De quel type de document auraient-ils besoin pour bien comprendre ce que je veux exactement.

Je veux dire, existe-t-il des documents standard qui décrivent le nouveau langage de programmation / script en question?

JTS
la source
comme il s'agit de programmation, pas de programmeurs, c'est probablement mieux pour StackOverflow.
Muad'Dib
14
Je ne suis pas d'accord avec Muad'Dib. Je pense que c'est un bon endroit pour cette question.
Chris
5
Je pense que plutôt que d'inventer votre propre langage de script, au prix d'une énorme quantité de travail pour vous et votre utilisateur devez apprendre un nouveau langage, vous feriez mieux d'intégrer un langage de script existant. Certains langages, par exemple Python, Javascript / ECMAScript, sont conçus pour pouvoir être intégrés à un cadre plus grand. En bref, vous aurez seulement besoin de concevoir l'API et de trouver un moyen d'intégrer l'interpréteur de script dans votre propre programme.
Lie Ryan
1
Il y a un avantage à le faire si la langue doit être une DSL. pour une langue générale pas tellement. Bien sûr, certains langages généraux sont de très bonnes bases pour les DSL, par exemple Lisp ou TCL
jk.

Réponses:

16

Ce que vous devez écrire s'appelle une spécification de langue .

Il doit contenir une description de la grammaire du langage (de préférence sous forme Backus-Naur étendue ) et de sa sémantique.

Pour la dernière partie, vous pouvez soit écrire une description dans vos propres mots (mais attention à être précis) ou une sémantique formelle .

sepp2k
la source
1
BNF n'est utile que pour les grammaires sans contenu, les langages de script ne sont pas toujours sans contexte, par exemple TCL (bien que je pense que vous pouvez toujours affirmer qu'il est préférable d'avoir un langage sans contexte dans la plupart des cas)
jk.
@jk. Je ne dirais pas que BNF est entièrement inutile pour les langages sans contexte. Selon le degré de non-contexte de la syntaxe, il peut toujours être judicieux de la spécifier dans EBNF, puis de résoudre les ambiguïtés en mots. C'est ce que fait le standard C ++ par exemple. Dans la plupart des cas, j'imagine que c'est encore plus clair que d'expliquer tout en mots ou de le spécifier à l'aide d'une grammaire contextuelle ou sans restriction.
sepp2k
vrai, mon point était plus il y a des langages comme lisp, tcl ou avant (qui sont en fait très bons pour définir les DSL dans) qui ont des syntaxes dégénérées et donc le BNF vous en dit très peu
jk.
@jk. Bien sûr, mais dans ce cas, tout autre moyen de décrire la syntaxe vous en dira tout aussi peu, simplement parce qu'il y a si peu à dire. Cela signifie simplement que la partie syntaxique de la spécification sera très courte.
sepp2k
13

Vous aurez besoin des éléments suivants:

  • Une raison de créer une nouvelle langue
  • Une philosophie
  • Une définition sémantique
  • Une description lexicale de vos jetons
  • Une définition d'analyse de syntaxe

En quoi votre langue sera-t-elle différente? Quelle est sa mission? Est-ce fonctionnel? Est-il orienté objet? Est-ce un méta-langage? Quelles sont ses caractéristiques uniques? Que donnera-t-il au monde qui n'existe pas (ou qui existe de façon laide)? Comment voulez-vous changer les choses? Est-il compilé ou interprété? Une langue DSL ou à usage général? C'est votre philosophie et dicte beaucoup sur la conception de votre langue.

Ensuite, travaillez à gratter la syntaxe et la sémantique approximatives sur papier. Ce sera votre définition sémantique ... écrire du faux code est un excellent moyen de développer vos pensées. Lisez "Le langage de programmation C" pour un excellent exemple de la façon dont cela est fait. Joue avec.

Vous devrez ensuite définir vos jetons et votre syntaxe d'une manière ou d'une autre. Les programmes les traitent ensuite en automates capables de lire des chaînes et de traiter la syntaxe. Yacc et Bison utilisent des expressions régulières et une syntaxe de style BNF pour l'analyse lexicale et syntaxique respectivement. Il existe également des outils similaires à Yacc et Bison dans d'autres langues.

Vous aurez également besoin d'une formation en théorie du langage / compilateurs pour savoir quoi ne PAS faire. Les exemples incluent des grammaires ambiguës, des problèmes de génération et de manipulation d'AST et généralement comment vous simplifier la vie. Connaître la théorie est très important. J'envisagerais de commencer par:

Compilateurs: principes, techniques et outils (Dragon Book)
Implémentation du compilateur moderne en C ou implémentation du compilateur moderne en Java

Aiden Bell
la source
1
+1 pour la philosophie, pour DSL, vous voulez clairement identifier le domaine ici
jk.
8

99,9% du temps, la création d'une nouvelle langue est totalement inutile. Le retour sur investissement serait très probablement minime, et vous auriez simplement perdu votre temps.

Très probablement, vous pouvez utiliser Javascript comme langage de script susceptible, et il existe déjà des analyseurs pour la plupart des langues. Vous pouvez également utiliser d'autres langages de script que vous aimez si vous pouvez trouver un analyseur approprié pour eux. Les implémenter dans votre programme nécessiterait beaucoup moins de travail et aurait un plus grand retour. Les gens n'ont pas à apprendre une autre langue, ils ont juste à apprendre votre API. C'est une bien meilleure solution.

Créer une nouvelle langue est presque toujours mauvais.

TheLQ
la source
9
Sauf pour la multitude de fois où ce n'est pas mauvais. La création de vos propres DSL simples peut être très utile. Maintenant, créer votre propre langage à usage général serait plus conforme à ce que dit votre réponse.
ChaosPandion
@ChaosPandion mais beaucoup de langues excellent déjà dans la création d'une DSL qui utilise le code de cette langue (c'est-à-dire que ruby ​​est bon dans ce domaine)
alternative
2
Je suis d'accord avec votre réponse mais je pense que ce n'est pas la bonne réponse à cette question. Je crois que l'auteur de la demande examine les généralités de la création d'un langage de script et non les avantages / inconvénients de la création d'un.
Tim Murphy
La création d'une nouvelle langue est presque toujours la meilleure solution. en.wikipedia.org/wiki/Language-oriented_programming
SK-logic
3

Vous pouvez décrire la grammaire de votre langue en BNF .

Par exemple, c'est la grammaire de Python .

grokus
la source
6
La grammaire en elle-même n'est cependant pas assez d'informations pour implémenter un langage. Il devra également spécifier la sémantique d'une manière ou d'une autre.
sepp2k
0

si vous utilisez .NET, voici quelque chose que je suis tombé sur quelque temps en arrière. Je lui ai seulement jeté un coup d'œil curieux, mais peut-être vous serait-il utile: ironie .

Irony est un kit de développement pour implémenter des langages sur la plate-forme .NET.

DevSolo
la source