正式语言有严格的语法要求。例如:3+3=6是正确的算式语句,而3+=3$6则是错误的。
语法规则有两种风格,涉及到符号和结构。符号是语言的基本元素,如单词,数字,化学元素等。3+=3$6之所以是错误的是因为$在数学计算中不是一个合法的符号(至少我是这么认为的)。
第二种语法规则也与语句的结构有关,也就是说,符号是按序排列的,3+=3这个语句不对是因为即使+和=是合法的符号,但是却不能把两个符号同时放在一起使用(此处存疑,因为C语言中是支持x+=1这种写法的)。
练习1
写一条语法结构良好但是包含非法符号的句子,然后在写下一条结构非法但是没有非法符号的句子。
当你用正式语言阅读的时候,你必须弄清楚句子的结构(尽管使用自然语言的时候是无意而为的),这个过程叫做解析。
举个例子,当你听到“The penny dropped”,你会想到“The penny”是主语,“dropped”是谓语,当你解析完整个句子,你才会明白这句话的意思或语义。假设你知道“penny”和“drop”是什么意思,那么这句话的意思你就基本清楚了。(字面意思是“钱掉了”,penny有“便士”的意思,习语表示“恍然大悟”的意思)
尽管正式语言和自然语言有很多共同点,例如符号,结构,语义和语法等,但是它们依然有区别:
歧义:
自然语言是具有模糊特性的,人类在使用自然语言的时候是会参考上下文的语境以及其他相关信息的。而正式语言则不允许有任何歧义,它不管上下文的内容,每一句话只表达一种含义。
冗余:
为了减少歧义并且避免误解,自然语言包含了很多冗余信息,因此,自然语言有点啰嗦,而正式语言则更加简洁。
文字:
自然语言里面包含了很多习语和比喻。正如我前面说的“The penny dropped”,并不是说钱掉了(习语是说某人迷惑之后突然意识到了,有恍然大悟的意思),正式语言则按字面含义来理解。人类使用自然语言肯定无法适应正式语言的这种特性。从某些方面来说,自然语言和正式语言之间的差异就想诗歌和散文一样,但不仅仅如此:
诗歌:
诗歌不仅意境深远而且读起来押韵唯美,主要是为了表达作者要抒发的情感,不仅晦涩难解,甚至字里行间刻意为之!
散文:
散文则侧重表达字面含义,字里行间能提供更多内容,比诗歌更容易分析,但是也有词不达意的情况。
程序:
计算机程序是没有任何歧义的,是可以通过符号和结构的分析完全理解的。
这里有一些阅读程序的建议(包含其它的正式语言):首先,阅读正式语言比阅读自然语言需要更多的时间。另外,结构也很重要,并不是说从头到尾阅读一字不落的阅读就能有助于理解。相反,在脑子里直接解析程序结构和内容更有帮助。最后,细节决定一切,因为在自然语言中小的拼写错误,发音错误是可以忽略的,但是正式语言则不然。
1.5 第一个程序
按照惯例,第一个程序通常称之为“Hello, World!”,就是在屏幕上输出文字“Hello, World!”,Python里面只要这一句就可以:
print 'Hello, World!'