嗨,编程语言:开始设计

我们开始设计Hi编程语言这是一个简介和一些有关为什么需要这样做的问题的解答。但是,如果没有认真的理由,如果认真对待,语言设计是一项非常有趣的任务。



遵循我们最大的学习可访问性论点,我们将尝试从其他算法语言的广泛使用元素中逻辑地集成语言的所有基本元素。这里我们遵循第一篇文章中给出的内部逻辑,并假设几种流行语言的实体的组成将使人们更轻松地掌握新内容变得更加容易,因为人们有一台基于神经网络的内置集成机,该集成机会自动引入语义上的违规行为。 soobscheni。



从已知的元素构造新语言的想法由来已久。140多年前,Zamenhof博士从其他自然语言的组成部分中创造了世界语的人工语言。事实证明,这种语言非常合逻辑且易于学习,以至于它是可行的,并且一直存在至今。例如,它在Google翻译中可用。Saluton Habr!Bonvenon sub la kat!



让我们尝试设计一种语言,方便的智力游戏和谜语快速编程,以及它的使用将与取悦它的一致性和体贴。



评论



对于单行注释,请使用符号(Python,R,Ruby)。//(C和许多其他语言)的组合可以用作整数除法运算符,以将运算结果作为实数获取,以免在这种情况下不使用像Swift中那样有点麻烦的转换表达式,例如CGFloat(int)。



PRINT “Hi world\n”
#  Hi world     


要突出显示多行注释,请使用##组合

##   .
,      Python ##


#符号的选择也很方便,因为将来Hi语言解释器将使用它来处理程序文本中的元标记,这些标记可以从注释文本中合成。这有点像C / C ++中的预处理器,顺便说一句,它也使用#符号。



基本数据类型



基本版中的Hi语言使用三种基本数据类型:



二进制:BOOL

可能的操作:(和),| (或),(不)

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


整数:INT

可能的操作:+-*/(整数除法),(余数),//(将结果自动转换为REAL类型的除法)

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


实数:REAL

可能的操作:+-*/

VAR pi = 3.1415926535


弦乐



字符串是复合类型,因为它们被视为Unicode字符的字符串

LET the_force = “flow through you”


我们不对字符串文字使用单引号,因为字符(尤其是位于标准键盘上的字符)是未来的宝贵资源。

标准字符串操作:

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


现在,我们不需要引入Character类型的数据类型。解决实际问题,您可以使用...

#    
LET secondSym = language[2]


在索引引用在字符串之外的情况下的赋值结果为“”,并且不会导致运行时错误。



常量和变量



正如我们在上面的示例中看到的那样,Hi是一种静态类型的语言,可减少使用标识符时出错的可能性并更好地理解其用途。必须在首次使用该对象之前声明常量(LET)和变量(VAR)。声明类型而不通过分配初始值显式指定特定类型更符合人体工程学。在这种情况下,类型推断变得显而易见。

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


声明常量和变量let和var的概念是从Swift借来的,但是在Hi中,可以通过分配一个值来进行多个声明:

VAR i, j, k = 0


标准输入输出



键盘输入的数据由INPUT命令执行

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


您无需输入true或false即可输入BOOL值。我们正在准备在AppStore中发布的用于编程的移动应用程序足够聪明,在这种情况下,只显示两个带有二进制选项的按钮。同样,将显示没有用于输入整数的句点的数字键盘和用于输入文本值的常规键盘。PRINT



命令将行打印到控制台显示类型屏幕。默认值为20行,每行40个字符。您可以选择10 X 20或以下大字符的模式:40 X 80。

PRINT "     Hi language"


嗨计算器语言



现在,我们拥有一切内容来构成计算器的语法,就Hi语言而言,它具有EBNF形式的交互式输入输出。

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


与许多语言的语法不同,在更广泛的标识符类别的例外列表中包括关键字,我们引入了一种特殊的标记-关键字,该关键字已在Hi语言解释器扫描程序级别被识别。



在下一篇文章中,除了STRING,我们还将在Hi中引入复合数据类型。对于我们的简单语言,它们足够强大,可以轻松表达操纵对象集,数组和字典的想法。



All Articles