Hi Programming Language: commencer à concevoir

Nous commençons à concevoir le langage de programmation Hi . Voici une introduction et quelques réponses aux questions sur les raisons pour lesquelles vous en avez besoin. Cependant, et sans raison valable, la conception du langage est une tâche inhabituellement intéressante si vous la prenez au sérieux.



Suite à notre thèse d'accessibilité maximale pour l'apprentissage, nous tenterons d'intégrer logiquement tous les éléments de base du langage à partir des éléments largement utilisés d'autres langages algorithmiques. Nous suivons ici la logique interne donnée dans le premier article et l'hypothèse selon laquelle la composition des entités de plusieurs langages populaires facilitera la saisie de nouveau contenu avec moins d'effort, car les gens ont une machine d'intégration intégrée basée sur des réseaux de neurones qui introduit automatiquement des violations de sémantique parte. soobscheni.



L'idée de construire de nouveaux langages à partir d'éléments déjà connus a une longue histoire. Il y a plus de 140 ans, le Dr Zamenhof a créé la langue artificielle de l'espéranto à partir des parties constituantes d'autres langues naturelles. La langue s'est avérée si logique et facile à apprendre qu'elle s'est avérée viable et a survécu jusqu'à ce jour. Par exemple, il est disponible dans Google Translate. Saluton Habr! Bonvenon sous la kat!



Essayons de concevoir un langage pratique pour la programmation rapide de jeux et puzzles intellectuels, et dont l'utilisation plaira par sa cohérence et sa prévenance.



commentaires



Pour un commentaire sur une ligne, utilisez le symbole # (Python, R, Ruby). La combinaison // (C et de nombreux autres langages) peut être utilisée comme opérateur de division d'entier pour obtenir le résultat d'une opération en nombre réel, afin de ne pas utiliser dans ce cas une expression de conversion un peu lourde comme CGFloat (int), comme dans Swift.



PRINT “Hi world\n”
#  Hi world     


Pour mettre en évidence les commentaires sur plusieurs lignes, utilisez la combinaison ## .

##   .
,      Python ##


Le choix du symbole # est également pratique car à l'avenir, il sera utilisé par l'interpréteur de langage Hi pour traiter les balises méta dans le texte du programme, qui peuvent être synthétisées à partir du texte des commentaires. C'est un peu comme le préprocesseur en C / C ++, qui, d'ailleurs, utilise également le symbole #.



Types de données élémentaires



Le langage Hi dans l'édition de base utilise trois types de données élémentaires:



Binaire: BOOL

Opérations possibles: & (et), | (ou), ~ (pas)

LET true = TRUE 
LET false = FALSE
PRINT true & true   #  TRUE
PRINT true | false   #  TRUE
PRINT ~true   #  FALSE


Entiers: INT

Opérations possibles: + , - , * , / (division entière), % (reste), // (division avec conversion automatique du résultat en type REAL)

VAR i = 0
PRINT (i + 6 – 2) * 3 / 5   #  2


Nombres réels: REAL

Opérations possibles: + , - , * , /

VAR pi = 3.1415926535


Cordes



Les chaînes sont de type composite car elles sont traitées comme une chaîne de caractères Unicode

LET the_force = “flow through you”


Nous n'utilisons pas de guillemets simples pour les chaînes littérales, car les caractères, en particulier ceux situés sur le clavier standard, sont une ressource précieuse pour l'avenir.

Opérations de chaîne standard:

# 
VAR language = “C”
LET statement  = “ – the best language ever”
LET proposition = language + statement
language = “Python”


Pour l'instant, nous n'avons pas besoin d'introduire un type de données du type Character; pour résoudre des problèmes pratiques, vous pouvez utiliser ...

#    
LET secondSym = language[2]


Le résultat de l'affectation dans le cas où la référence par l'index est en dehors de la chaîne est «» et ne conduit pas à une erreur d'exécution.



Constantes et variables



Comme nous l'avons vu dans les exemples ci-dessus, Hi est un langage typé statiquement pour réduire la probabilité d'erreurs dans l'utilisation des identifiants et une meilleure compréhension de leur objectif. Les constantes ( LET ) et les variables ( VAR ) doivent être déclarées avant la première utilisation de l'objet. Il est plus ergonomique de déclarer des types sans spécifier explicitement un type spécifique en attribuant des valeurs initiales; dans ce cas, l'inférence de type devient évidente.

##  
LET one: INT = 1  : ##
LET one = 1
VAR boolean = TRUE


Le concept de déclaration de constantes et de variables let et var est emprunté à Swift, mais dans Hi, il est possible de faire plusieurs déclarations avec l'affectation d'une valeur:

VAR i, j, k = 0


Entrée et sortie standard



La saisie des données à partir du clavier est effectuée par la commande INPUT :

VAR startFrom: INT
PRINT "Start from: "; INPUT startFrom


Vous n'avez pas besoin de taper vrai ou faux pour entrer une valeur BOOL. L'application mobile de programmation, que nous préparons pour la sortie dans l'AppStore, est suffisamment intelligente pour n'afficher que deux boutons avec un choix binaire dans ce cas. De même, un clavier numérique sans période pour saisir un entier et un clavier normal pour saisir une valeur de texte seront affichés.



La commande PRINT imprime des lignes sur un écran de type d'affichage de console. La valeur par défaut est de 20 lignes de 40 caractères. Vous pouvez sélectionner le mode avec de grands caractères 10 X 20 ou petits: 40 X 80.

PRINT "     Hi language"


Bonjour la langue de la calculatrice



Nous avons maintenant tout pour former une grammaire d'une calculatrice avec entrée-sortie interactive sous forme d'EBNF en termes de langage Hi.

1. The Syntax of HI Programming Language

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
capital = "A" | ... | "Z".
small = "a" | ... | "z".
character = [Unicode_character].
addOperator = "+" | "-" | "|".
mulOperator = "*" | "/" | "//" | "%" | "&".
relation = "==" | "~=" | "<" | "<=" | ">" | ">=".

integer = digit {digit}.
real = digit {digit} "." {digit}.
string = """ {character} """.

number = integer | real.
letter = capital | small.

keyword = capital capital {capital}.
ident = letter {letter | digit}.
type = keyword.

factor = number | string | TRUE | FALSE | ident | "(" expression ")" | "~" factor.
term = factor {mulOperator factor}.
simpleExpression = ["-"] term {addOperator term}.
expression = simpleExpression [relation simpleExpression].
assignment = ident "=" expression.

identList = ident {"," ident}.
expList = expression {"," expression}.
constDeclaration = LET identList [":" type] "=" expression.
varDeclaration = VAR identList [":" type] ["=" expression].
funcCall = keyword [expList ].

statement = assignment | funcCall | constDeclaration | varDeclaration 
statementSequence = statement {("\n" | ";") statement}.

2. Standard Data Types

BOOL	INT	REAL	STRING

3. Standard Procedures and Functions

INPUT	PRINT

4. Other Keywords

LET	VAR


Contrairement à la grammaire de nombreuses langues, où les mots-clés sont inclus dans la liste des exceptions d'une classe plus générale d'identifiants, nous introduisons un type spécial de jeton - mot-clé, qui est déjà reconnu au niveau du scanner d'interprétation de langue Hi.



Dans le prochain article, nous présenterons les types de données composites dans Hi en plus de STRING. Pour notre langage simple, ils sont suffisamment puissants pour exprimer facilement l'idée d'opérer sur des ensembles d'objets, des tableaux et des dictionnaires.



All Articles