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最煩的是這種,給出告終果但卻不是想要的那個
咱們的目標是:學會如何組合哪些基本原語集,來表達咱們想要的東西給計算機,讓計算機按咱們的想法去實現咱們的目標