Hai Bahasa Pemrograman: mulai mendesain

Kami mulai merancang bahasa pemrograman Hi . Berikut adalah pengantar dan beberapa jawaban atas pertanyaan tentang mengapa Anda membutuhkannya. Namun, dan tanpa alasan yang bagus, desain bahasa adalah tugas yang sangat menarik jika Anda menanganinya dengan serius.



Mengikuti tesis kami tentang aksesibilitas maksimum untuk pembelajaran, kami akan mencoba mengintegrasikan secara logis semua elemen dasar bahasa dari elemen bahasa algoritmik lain yang banyak digunakan. Di sini kita mengikuti logika internal yang diberikan di artikel pertama dan asumsi bahwa komposisi entitas dari beberapa bahasa populer akan memudahkan untuk memahami konten baru dengan sedikit usaha, karena orang memiliki mesin pengintegrasi bawaan berdasarkan jaringan saraf yang secara otomatis memasukkan pelanggaran parte semantik. soobscheni.



Ide membangun bahasa baru dari elemen yang sudah dikenal memiliki sejarah yang panjang. Lebih dari 140 tahun yang lalu, Dr. Zamenhof menciptakan bahasa buatan Esperanto dari bagian utama bahasa alami lainnya. Bahasanya ternyata sangat logis dan mudah dipelajari sehingga ternyata bisa bertahan dan bertahan hingga hari ini. Misalnya, tersedia di penerjemah Google. Saluton Habr! Bonvenon sub la kat!



Mari kita coba merancang bahasa yang nyaman untuk pemrograman cepat permainan dan teka-teki intelektual, dan penggunaannya akan menyenangkan dengan logika dan perhatiannya.



Komentar



Untuk komentar satu baris, gunakan simbol # (Python, R, Ruby). Kombinasi // (C dan banyak bahasa lain) dapat digunakan sebagai operator pembagian bilangan bulat untuk mendapatkan hasil operasi sebagai bilangan real, agar tidak digunakan dalam hal ini ekspresi konversi yang sedikit rumit seperti CGFloat (int), seperti di Swift.



PRINT โ€œHi world\nโ€
#  Hi world     


Untuk menyorot komentar banyak baris, gunakan kombinasi ## .

##   .
,      Python ##


Pilihan simbol # juga nyaman karena di masa mendatang akan digunakan oleh penerjemah bahasa Hi untuk memproses tag meta dalam teks program, yang dapat disintesis dari teks komentar. Ini mirip dengan preprocessor di C / C ++, yang juga menggunakan simbol #.



Tipe data dasar



Bahasa Hi dalam edisi dasar menggunakan tiga tipe data dasar:



Biner: BOOL

Kemungkinan operasi: & (dan), | (atau), ~ (tidak)

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


Integers: INT

Kemungkinan operasi: + , - , * , / (pembagian integer), % (sisa), // (pembagian dengan hasil konversi otomatis ke tipe REAL)

VAR i = 0
PRINT (i + 6 โ€“ 2) * 3 / 5   #  2


Bilangan real: REAL

Kemungkinan pengoperasian: + , - , * , /

VAR pi = 3.1415926535


String



String adalah tipe komposit karena diperlakukan sebagai string karakter Unicode

LET the_force = โ€œflow through youโ€


Kami tidak menggunakan tanda kutip tunggal untuk string literal, karena karakter, terutama yang terletak di keyboard standar, adalah sumber daya yang berharga untuk masa depan.

Operasi string standar:

# 
VAR language = โ€œCโ€
LET statement  = โ€œ โ€“ the best language everโ€
LET proposition = language + statement
language = โ€œPythonโ€


Untuk saat ini, kita tidak perlu memperkenalkan tipe data dari tipe Character; untuk memecahkan masalah praktis, Anda dapat menggunakan ...

#    
LET secondSym = language[2]


Hasil penugasan jika referensi oleh indeks berada di luar string adalah "" dan tidak menyebabkan kesalahan waktu proses.



Konstanta dan Variabel



Seperti yang kita lihat pada contoh di atas, Hi adalah bahasa yang diketik secara statis untuk mengurangi kemungkinan kesalahan dalam penggunaan pengenal dan pemahaman yang lebih baik tentang tujuannya. Konstanta ( LET ) dan variabel ( VAR ) harus dideklarasikan sebelum penggunaan pertama objek. Lebih ergonomis untuk mendeklarasikan tipe tanpa secara eksplisit menentukan tipe tertentu dengan memberikan nilai awal; dalam hal ini, jenis inferensi menjadi jelas.

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


Konsep mendeklarasikan konstanta dan variabel let dan var dipinjam dari Swift, tetapi di Hi dimungkinkan untuk membuat beberapa deklarasi dengan penugasan satu nilai:

VAR i, j, k = 0


Input dan output standar



Input data dari keyboard dilakukan dengan perintah INPUT :

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


Anda tidak perlu mengetik benar atau salah untuk memasukkan nilai BOOL. Aplikasi seluler untuk pemrograman, yang kami persiapkan untuk rilis di AppStore, cukup pintar untuk menampilkan hanya dua tombol dengan pilihan biner dalam hal ini. Demikian pula, keypad numerik tanpa titik untuk memasukkan integer dan keyboard biasa untuk memasukkan nilai teks akan ditampilkan.



Perintah PRINT mencetak baris ke layar tipe tampilan konsol. Standarnya adalah 20 baris dengan 40 karakter. Anda dapat memilih mode dengan karakter besar 10 X 20 atau kecil: 40 X 80.

PRINT "     Hi language"


Hai Bahasa Kalkulator



Sekarang kita memiliki segalanya untuk membentuk tata bahasa kalkulator dengan input-output interaktif dalam bentuk EBNF dalam bahasa 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


Tidak seperti tata bahasa banyak bahasa, di mana kata kunci dimasukkan dalam daftar pengecualian dari kelas pengenal yang lebih umum, kami memperkenalkan jenis khusus token - kata kunci, yang sudah dikenali pada tingkat pemindai juru bahasa Hi.



Di artikel berikutnya, kami akan memperkenalkan tipe data komposit di Hi selain STRING. Untuk bahasa sederhana kami, mereka cukup kuat untuk dengan mudah mengekspresikan ide-ide memanipulasi set objek, array dan kamus.



All Articles