Each programing language provides a set of primitive operationpython
任何一门编程语言都提供了原语集程序员
图灵完备性中的六个基本类型:编程
https://stackoverflow.com/questions/28148562/what-are-the-six-basic-primitives-in-turing-completepython2.7
这些基本类型或者说原语集能够组合成复杂的指令去执行咱们须要的操做——就好像变量定义、函数定义、数值运算等基本语句组合后能够变成具体的功能软件同样。编程语言
Primitive constructs ide
谈到语言的时候,首先要描述什么是原语结构?放在一块儿的元素是什么?函数
——programming language—numbers,strings,simple operators学习
编程语言中的一些基本元素:数字、字符串(或叫字符序列)、简单的操做符。这些等效于英语里的wordspa
当这些东西组合时就触及了语言的语法概念。ci
语法告诉咱们这些基本word的哪些组合在语言中是符合文法的组合,好比:
数字+操做符+数字就是正确的语法
语法对了,还要考虑语义。
语义指表达式所关联的意思,语义有两类:
1. static semantics—which syntactically valid strings have a meaning
静态语义。指的是符合语法的句子里哪些是有含义的,例如:
对于1/abc,字符+操做符+字符,在语法上是可行的。可是在静态语义上是无效的,数字不能除于字符串,这样写报错的是结果错,不是语句错。
2. semantics—what is the meaning associated with a syntactically correct string of symbols with no static semantic errors
语言的形式语义或者叫全语义,指的是符合语法和静态语义的句子表达的是什么意思,例如:
英语的句子会有歧义,中文也有,好比“孩子没了父母真悲伤”——是孩子没了父母悲伤仍是孩子没有父母因此悲伤?
这种意思要靠上下文、语调等环境来正确理解。
在编程语言中,一条语句有且仅有一种意思。(我在想,这是否是意味着“可修改性强”的意思不是某个语句的意思能够任意改,而是指单个语句意思必须肯定,可是能够经过在语句之间或者外面加入新语句之类的办法)
不少时候某个语句所表达的意思并不彻底是程序员想的那个意思。
以上就是语义存在的意义,她告诉咱们表达式到底表达了什么意思,而咱们要作的就是反过来经过语义推导出正确的语法来达到咱们的目的。
为何会有bug?
1. Syntactic errors
语法错误挺容易发生,但也很容易被计算机捕捉到
2. static semantic errors
静态语义错误不多。对于编译型语言,是在执行程序前就去查这种错误;像python这样的解释型语言中,程序是一直在执行的,也就是解释器一直在解释整个程序,因而就在出现错误的地方立刻警告咱们
3. programs don‘t have semantic errors,but meaning may not be what was intended
一、2都没有时也就是没有语义错误,就必定是有意思的语句。只是可能这种意思和咱们像表达的不同,好比:
1.crashes(stops running)程序崩溃
2.runs forever 程序一直运行不中止
3.produces an answer,but not programmer‘s intent最烦的是这种,给出告终果但却不是想要的那个
咱们的目标是:学会如何组合哪些基本原语集,来表达咱们想要的东西给计算机,让计算机按咱们的想法去实现咱们的目标