从案例说起

  示例:摘自Essential C++,改进版

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string user_name,name2;
cout<<"Please enter your first name:";
cin>>user_name;
cin>>name2;
cout<<' '
    <<"Hello,"
 <<user_name
 <<"   and   "
 <<name2
    <<"   goodby! ";
return 0;
}

  参考Essential C++看完之后,可以明白两层意思,第一是程序可以做什么;第二是程序各部分的基本词素意思。但是了解了这二层意思仍然让人一头雾水。不知从何下手。于是,有了第三层理解。

  第三层理解:用什么定义C++的语法表达式?用什么定义关键字?用什么定义标识符?于是,只好去查编译原理,里面的词法分析中,有一个产生式规则,可以对C++的语法表达式进行定义。 一个关键字对应一个词素,一个词素对应所有的标识符。预处理可以解释#define等声明,并起调用作用。

  产生式规则是一个很有意思的东西,简单的说,是拿一个前提条件,推出一个果,然后不断的自我反馈调用直到全部推理出终结果。本身可以分为三部分:事实库,规则库,控制器。个人认为是这跟数理逻辑为直接的实现形式。由产生式规则构建了各种各样的词法分析器。也可以认为产生式规则是各种高级语言语法表达式的分野。认为产生式规则是编程语言的牛鼻子一点也不为过。

  许多人认为C++很难,主要是因为所有的课程中,并没有将产生式规则及系统作为一个编程的重要概念基础提出(好能够查找相关的资料深入理解一番),由此后面的衍生概念难以理解。理解这一点后,我们再翻开C++的所谓的各种表达式规范格式,发现这只不过是产生式规则给不同的对象的定义罢了。也是说,产生式规则是一个元范式格式。构成了语法表达式定义的基础。当然,你也可以自己定义自己喜欢的语法表达式,如果构造的足够系统,一门新的编程语言诞生了。当年的java是这样来的。

  如有不足之处,请指处,欢迎读者拍砖!