计算机程序执行过程是动态数据处理的过程,存储器的功能不仅是数据的存储结构,而且是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>}
/* 思念是一种很玄的东西 */