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.