Olá, linguagem de programação: começando a projetar

Estamos começando a projetar a linguagem de programação Hi . Aqui está uma introdução e algumas respostas às perguntas sobre por que você precisa dele. No entanto, e sem uma boa razão, o design da linguagem é uma tarefa incomumente interessante se você levá-la a sério.



Seguindo nossa tese de acessibilidade máxima para a aprendizagem, tentaremos integrar logicamente todos os elementos básicos da linguagem a partir dos elementos amplamente utilizados de outras linguagens algorítmicas. Aqui, seguimos a lógica interna dada no primeiro artigo e a suposição de que a composição das entidades de várias linguagens populares tornará mais fácil compreender o novo conteúdo com menos esforço, uma vez que as pessoas têm uma máquina de integração embutida baseada em redes neurais que automaticamente introduz violações de parte semântica. soobscheni.



A ideia de construir novas linguagens a partir de elementos já conhecidos tem uma longa história. Mais de 140 anos atrás, o Dr. Zamenhof criou a língua artificial do Esperanto a partir das partes constituintes de outras línguas naturais. A linguagem acabou sendo tão lógica e fácil de aprender que se tornou viável e sobreviveu até hoje. Por exemplo, ele está disponível no tradutor do Google. Saluton Habr! Bonvenon sub la kat!



Vamos tentar desenhar uma linguagem que seja conveniente para a programação rápida de jogos e quebra-cabeças intelectuais, e cujo uso agradará com sua lógica e consideração.



Comentários



Para um comentário de uma linha, use o símbolo # (Python, R, Ruby). A combinação // (C e muitas outras linguagens) pode ser usada como um operador de divisão inteira para obter o resultado de uma operação como um número real, de modo a não usar neste caso uma expressão de conversão um pouco pesada como CGFloat (int), como em Swift.



PRINT “Hi world\n”
#  Hi world     


Para destacar comentários de várias linhas, use a combinação ## .

##   .
,      Python ##


A escolha do símbolo # também é conveniente porque, no futuro, ele será usado pelo interpretador de linguagem Hi para processar metatags no texto do programa, que podem ser sintetizadas a partir do texto do comentário. É um pouco parecido com o pré-processador em C / C ++, que, por falar nisso, também usa o símbolo #.



Tipos de dados elementares



Oi idioma na edição básica usa três tipos de dados elementares:



Binário: BOOL

Operações possíveis: & (e), | (ou), ~ (não)

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


Inteiros: INT

Operações possíveis: + , - , * , / (divisão inteira), % (resto), // (divisão com conversão automática do resultado para o tipo REAL)

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


Números reais: REAL

Operações possíveis: + , - , * , /

VAR pi = 3.1415926535


Cordas



Strings são um tipo composto porque são tratados como uma string de caracteres Unicode

LET the_force = “flow through you”


Não usamos aspas simples para literais de string, uma vez que os caracteres, especialmente aqueles localizados no teclado padrão, são um recurso valioso para o futuro.

Operações de string padrão:

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


Por enquanto, não precisamos introduzir um tipo de dados do tipo Character; para resolver problemas práticos, você pode usar ...

#    
LET secondSym = language[2]


O resultado da atribuição no caso em que a referência do índice está fora da string é “” e não leva a um erro de tempo de execução.



Constantes e Variáveis



Como vimos nos exemplos acima, Hi é uma linguagem tipificada estaticamente para reduzir a probabilidade de erros no uso de identificadores e um melhor entendimento de sua finalidade. Constantes ( LET ) e variáveis ​​( VAR ) devem ser declaradas antes do primeiro uso do objeto. É mais ergonômico declarar tipos sem especificar explicitamente um tipo específico atribuindo valores iniciais; neste caso, a inferência de tipo torna-se óbvia.

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


O conceito de declarar constantes e variáveis ​​let e var é emprestado do Swift, mas no Hi é possível fazer várias declarações com a atribuição de um valor:

VAR i, j, k = 0


Entrada e saída padrão



A entrada de dados do teclado é realizada pelo comando INPUT :

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


Você não precisa digitar verdadeiro ou falso para inserir um valor BOOL. O aplicativo móvel para programação, que estamos preparando para lançamento na AppStore, é inteligente o suficiente para exibir apenas dois botões com uma escolha binária neste caso. Da mesma forma, um teclado numérico sem ponto para inserir um número inteiro e um teclado normal para inserir um valor de texto serão exibidos.



O comando PRINT imprime linhas em uma tela de tipo de exibição do console. O padrão é 20 linhas de 40 caracteres. Você pode selecionar o modo com caracteres grandes 10 X 20 ou pequenos: 40 X 80.

PRINT "     Hi language"


Olá, linguagem da calculadora



Agora temos tudo para formar uma gramática de uma calculadora com entrada-saída interativa na forma de EBNF em termos da linguagem 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


Ao contrário da gramática de muitas línguas, onde palavras-chave são incluídas na lista de exceções de uma classe mais geral de identificadores, introduzimos um tipo especial de token - palavra-chave, que já é reconhecida no nível do scanner de intérprete de linguagem Hi.



No próximo artigo, apresentaremos os tipos de dados compostos no Hi, além do STRING. Para nossa linguagem simples, eles são poderosos o suficiente para expressar facilmente ideias de manipulação de conjuntos de objetos, matrizes e dicionários.



All Articles