大家谁见过,高级计算机语言程序,定义标识名称字串时使用表达式通用的运算符。只要是语言使用我们常用的计算表达式作为计算语法,那语法规则就绝对不让标识名称中使用+、-、*、/、%等运算符,还不能使用语言规则要使用的符号,、"、[]、{}等。如果标识名称使用这些符号,编译器扫描程序字符串流时,就没办法断词了。
如果c++语言里定义:
int add+tow(int val);
void test()
{
int
x=add+tow(2);
}
在语法分析中add+tow不认为是一个函数名称,而会认为是add和tow两个量的加,当然在使用文法后,add或tow没有定义的话,表达式就会出现错误提示。总的来说,高级计算机语言的程序员应该按照语言允许的格式要求编写程序是必须的,是法定的义务,就是我们人类使用语言表达也不能随心所欲。
因为编译器在编译一个高级语言源代码时,首先必须“认识”和“理解”程序字符串流的所有内容,如何从字符串流分解、分析计算机需要要素,和各要素之间的关系,这就要高级语言必须有固定文法和语法。
计算机程序的编写可以概括为标识和标识过程。这里的标识是上一节我们讲计算机程序代码文本定义(声明),标识过程是函数程序编写。通俗地讲就是用已明确定义东西编写新程序。他们都遵从一个原则,程序必须使用已经定义的或语言已经默认规定的标识内容。我们如果把这两种行为的语法全部罗列出来,然后考虑编译器开发,这样程序在架构时,便有了理论基础依据。以c++语言为例我们看看这两种行为都是什么?
c++标识词定义或声明
我们今天交流的编译原理,就c++语言和汉语编程的主要定义(声明)描述一下,有关高级语言宏的使用和其他方法等,不做介绍,因为那都是串操作(运算)的技巧或命令解释,不应属编译的范畴。
标识词类型有:
1、可以定义标识词(对象、函数等)的类型。包括基本数据类型定义词(void、char、int等)、结构定义词(struct)、用户自定义类定义词。你在C++函数程序编写时,试一试这样的定义标识“int
xxx(5);”的定义语句,会有什么感悟呢?这不就是类的构造函数使用模式吗?其实c++定义标识词都是“类”,无非是分语言开发环境为我们做好的基本数据类型类,和用户自定义类,struct是不含成员函数的纯数据类,他们都成为类标识词。
2、对象(变量)、指针、数组等可存放数据的标识词;也可以看成使用类定义的,具有真实数据空间的标识类型,简称对象标识词。
3、运算符标识词,从程序功能上讲,他们就是函数,从在运算表达式中作用看,他们又是对象(变量)或嵌套表达式(就是优先运算“()”和其中间面内容)之间分割符。如果明白了他们的作用,我们的编译器完全可以使用汉语全角符号当作运算符使用,只是会增加断词复杂程度,大大降低编译器的运行效率。
4、函数标识词。定义标识词定义函数时,并不是函数本身类属性,而是指函数代码运行后返回的结果的数据类型。
5、还有默认关键字标识词(if、else、do等),关键符号(优先运算符“()”分割符“,”,集合符“{}”等),编译器默认规定使用的标识。
他们各自的定义语法规则:
1、类定义语法
class 《类名称》 :public 《父类名》 { //
类内部成员 }
strct《类名称》 { //
类内部成员 }
类名称是新定义的,父类名(可无)是已经定义的,可以在文法词典中索引发现(下同)。类内部成员定义与2、3、4、5相同。
class和strct与《类名称》之间使用空格符分割。
2、对象(变量)、数组定义语法
《类名称》 《对象名称》 或 《类名称》 《对象名称》( xxx ,……
)
《类名称》 《对象名称》 [
xxx, …… ]
《类名称》与《对象名称》之间使用空格符分割。构造输入参数之间使用“,”分割。
3、指针)、数组定义语法
《类名称》 *
《指针名称》
《类名称》 * 《指针名称》[
xxx, …… ]
4、运算符重载语法
《类名称》(《类名称》 *) operator
《运算符》( 《类名称》 《对象名称》(或《类名称》 *
《指针名称》), …… )
输入参数定义之间使用“,”分割。
5、函数定义语法
《类名称》 《函数名》(
《类名称》 《对象名称>(或《类名称》 *
《指针名称》), …… )
输入参数定义之间使用“,”分割。
当总结出定义语法规则之后,我们就可以从文本流中找到,并通过词典发生器,建立新定义标识词的结构,并放入文法词典。放入词典的新标识,后续程序就认为其存在,并象其他已经存在标识词一样使用使用。
c++函数程序编写
函数程序编写语法规则看似比较复杂,如果对其层层剥离,规律非常明显。但不同版本c函数程序编写语法也不尽一样,keil的arm开发环境函数定义的临时变量必须在程序开始定义,与其他版本有差异。
语句集合->赋值语句、函数调用或结构控制语句->算术表达式。
“{}”之中内容一般是程序语句的集合。除特殊控制语句使用“
”空格符,其他语句之间使用“;”分割。
程序语句包括:控制语句、赋值语句、函数直接调用语句、特殊命令语句(delete
xxx)。赋值语句是包含赋值符“=”的语句。赋值与其他运算不应等同看待。
算术表达式是与我们数学中使用表达基本一样书写的式子,除有多参数输入的函数之外。计算机语言的表达式可以较复杂,也可以很简单。复杂表达式可以由的多层“()”和运算符组成,最简单表达式的仅可以由一个对象变量、指针、函数或常数代表。嵌套表达式就可以理解为是子表达式(“()”中的内容)与运算符组成更大的字符串描述。
算术表达式加上“=”是赋值语句,函数的每个输入参数同样是表达式。表达式是函数程序编写的基本核心,处理表达式的翻译是编译器中心内容。
表达式、赋值语句和控制语句组合实现程序代码的过程就是函数程序的编写。
汉语编程与c++区别
汉语编程程序例子:
建:
二次函数 ; f(x)=ax2+bx+c
对象:a
;浮点
对象:b
对象:c
对象: △
编: 构造(对象:a1
,对象:b1 , 对象:c1
)
a=a1
b=b1
c=c1
:编。
编: 销毁()
:编。
编:
打印函数关系式()
印字串("f(x)=%fx2+%fx+%f ",a,b,c)
:编。
编: 求△()
归(b*b-4*a*c)
:编。
编:
方程解1(对象:△)
; f(x)=0时
归((b+sqrt(△))/(2*a))
:编。
编:
方程解2(对象:△)
; f(x)=0时
归((b-sqrt(△))/(2*a))
:编。
编:
函数顶点()
编:
函数对称轴()
……
编:
绘制函数曲线()
:建。
启动:
进入()
对象: 一元二次方程(2,5,1)
一元二次方程.求△()
满足(一元二次方程.△>=0)就
印字串("方程解:x1=%f x2=%f ",一元二次方程.方程解1(△),
一元二次方程.方程解2(△))
否则
印字串("无解")
然后
:启动。