計算機程序執行過程是動態數據處理的過程,存儲器的功能不僅是數據的存儲結構,而且是CPU執行程序的源數據淨載荷和目標數據設置載荷。
一、對程序的深刻認識
程序從本質上說是描述一定數據的處理過程。程序語言從語法和語義兩方面定義。大型程序的結構又稱爲軟件結構,面向對象的大型程序由配置文件、功能模塊和連接子構成[1]。
計算機高級語言的語法是一組規則,用它可形成和產生一個合式的育成:這組規則的一部分是詞法規則,一部分是語法規則(產生規則)。語言的單詞符號由詞法規則確定,語法規則是指單詞符號組成程序的形成規則。
語法規則規定了如何從單詞符號形成最大的結構(即語法單位),語法規則是語法單位的形成規則。程序語言的語法單位有:表達式、語句、分程序、函數;過程和程序等等。
語言的詞法規則和語法規則定義了程序和形式結構。判斷輸入字符串是否構成一個形式上正確(即合式)程序的依據。
語義是一組規則,使程序具有完成數據處理的功能。語義規則是單詞符號和語法單位的含義,對程序而言則是翻譯成怎樣的目標代碼指令。
程序在本質上是描述一定數據的處理過程。對程序傳統的高級語言、層次結構、分類設計的全面認識有下述看法:
(i)程序語言從語法和語義兩方面定義。
(ii)大型程序的軟件結構可認爲是軟件的形式結構和組成結構。
(iii)程序設計分爲面向過程的模塊化設計、面向對象設計、函數式設計和邏輯程序設計。
(iv)程序的功能結構則是從新的視角認識程序。每個程序由多個原子功能根據程序的篇章結構組成。程序的功能結構可認爲是程序的語義結構。
研究方向:1.程序的語義結構。
程序的功能結構應論述清晰、全面、可用。
二、程序動態執行的語法規則
程序的原子功能與併發對象的原子操作不同,併發對象有共享內存和消息隊列等,着重的是併發對象的read,write,fetch等原子操作,在硬件基礎上依靠的是鎖;而程序的原子功能則是存儲器結構見的數據傳遞、元素數據的計算關係R[com],建立數據序列的序或者數據集的元素增長。因此原子功能不允許被中斷而且不需要鎖,能定義進程或線程的邊界。這與現在對CPU執行機器代碼時計算機內存、CPU數據設計的方式不同。程序動態執行的語法規則可稱爲算法的程序數據文法。
研究方向:2.算法的程序數據文法。
小的方向:2.1算法的程序數據文法在併發對象的應用。
參考文獻:赫利希Maurice Herlihy的論文。
《多處理器編程的藝術》
(一)算法的程序數據文法
程序的動態存儲結構可有棧、隊列、樹、圖,靜態數組、數據框、列表等。儘管程序數據的存儲結構可以是內存、外存或者網絡存儲,然而棧和隊列等存儲結構可用特定的專用精細存儲器實現,而不是在一個存儲器中,或者在有緩衝器的兩個或者多個所謂不間斷存儲器中。
算法的程序數據文法在程序數據執行過程中,制導產生程序數據文法的派生樹。
1.inorderTraverse算法
存儲結構:二叉樹BiTree與棧s的數據傳遞
inorderTraverse 算法的程序數據文法
stack中有6個數據句型。數據句柄是每一個句型的操作。數據產生式和傳統產生式的不同在產生式的符號不是字符而是代表程序數據的符號。而且,程序數據文法的推理過程並不是LR分析方式的,而是結構方式的,這個結構是程序動態執行的高級表示。因此,下面的程序數據文法有6個動態過程。
開始符號S,開始符號的數據產生式僅僅推理句型。因此,在stack中有6個句型,所以S有6個過程式的數據產生式,記載了數據句型從開始的a1到a1 a2 a3...a6。inorderTraverse程序的執行過程有5個階段。
(1)push left node sequence 建立根節點的最左子序列。實現二叉樹Bit到棧S的數據傳遞。
(2)sential form a1 數據句型a1,是根節點的左子序列。
(3)handle算法的句柄。對棧stack元素的操作。數據句柄的最後一個節點有右子。
(4)pop 回溯。二叉樹push left node sequnence 結束,則只能在從stack中彈出元素,使程序數據的動態執行能繼續。此次能pop 的所有元素是數據句柄。
(5)push rchild 將元素的右子節點保存到S。
output是輸出,產生的線性序列的元素。
S->a1 | S->a1 a2
(push left node sequence) - ->+ a |(push left node sequence) * ->b
(sentential form a1) a1-> - + a |(work sentential form F) F->* b
(handle) H-> a + |(sentential form a2) a2->N1 F
a1-> - (H)- |(handle) H-> b *
(pop) N1-> - | F->(H)-
(push rchild) + -> * | a2-> - (H)-
| (pop) N2-> -
|(push rchild) * -> -
output ---------------------------- | ----------------------------
<a,+> | <b,*>
S->a1 a2 a3 | S->a1 a2 a3 a4 | S->a1 a2 a3 a4 a5 |S->a1 a2 a3 a4 a5 a6
- -> c |d->null | / -> e | f->null
F-> - c |F -> d | F-> / e | F-> f
a3 -> N2 F | a4-> N3 F |a5 -> N4 F |a6 -> F
H ->c - | H-> - d |H -> e / |H-> f
F -> (H)- | a4->(H)- |a4 -> (H)- |a6 ->(H)-
a3 -> - (H)- |N4->null |N5->null |a6 -> null
N3 ->- | - -> / | / -> f |
- -> d | | |
output-------- |---------------- | ------------------ |-----------------------
<c,-> | <-,d> |<e,/> |<f>
parT={<a,+>,<b,*>,<c,->,<-,d>,<e,/>,<f>}
/* 思念是一種很玄的東西 */