《文法和自动机》

哪怕受过再高的教育,
也难于理解这样的算式:
“A+÷)=C ”, ......(1)
即便是小学生,
也准不会赞同如下的造句:
“飞翔正在那架非机”, ......(2)
再举一个不能接受的描述:
“香蕉吃大象”,“水果开机器”。......(3)

第(1)例的谬误是:
运算符叠加、括号未配齐;
(2)句中显然写错了一个词儿,
且颠倒了主谓成分的次序;
第(3)句虽然符合语法,
却具有荒唐的含义。
这告诉我们:
一个可为人们接受的正确句子,
须合乎“词法”、“语法”和“语义”。

日语把“吃饭”表达为“饭を食”,
英语把“你怎么样?”写成“怎么样是你?” (How are you?)
Fortran 语言中用“公用”、“等价”语句节省存储;
在 ALGOL 中此计未加采取。
而 ALGOL 中灵活的变界数组,
在 FORTRAN 语言中就不允许。

再瞧瞧:
"Time flies like the arrow",
"Fruit flies like the banana",
你可以理解为"光阴似箭"、"果蝇爱香蕉";
也可误译为"时间苍蝇喜欢箭",
"水果象香蕉一样飞"!

又如:
"The pig is in the pen",
如果不与上下文联系,
既可译为“猪在牲口圈”,
也可译为“警察在监狱”。
这反映了英语中的“多义性”,
可是跟计算机交谈,
用“有歧义”语言逗乐未必可取。

简言之,
不同语种规则不同,
“文法”是识别语言的根据。
计算机识别高级语言,
不外乎进行“词法”、“语法”、“语义”三层分析。
文法--语言的有穷描述。
自然要问:
怎样的描述才严谨、精辟?
正如数学使逻辑学上升为数理逻辑,
语言和文法的数学理论,
开拓了“形式语言研究”这个新领域。
文法形式化的研究指出:
多变的文法跑不出四类,
每一类都有与之“等价”的自动机。
一把钥匙开一把锁,
自动机和文法的配合也如此默契。

自动机--编译程序的核心,
“自动机”--语法自动识别器。
让我们避开自动机分类等深入课题,
试述它工作的通俗原理。

从大结构到小部件,
我们将“句子”进行剖析。
自然语言的大结构有--
“主、谓、宾、定、补、状";
形式语言句子的大结构叫《语法实体》。
最后的细分得到字或“终极符”,
中间阶段出现过词或“短语”。
这种分析借助形象描述,
有如一棵树从根到叶顺序画完毕。
结上生枝叫推导或派生,
机器上的类似过程皆自动处理。
语法树的导出严格遵循一组规则,
文法就是这组规则的全体。
规则用符号书写形如“α→β”,
α、β 各属某一字符集。
文法的严格”形式定义要用“四元组”,
利用“集合”概念陈述简洁而清晰,
用有限条规则概括丰富的语言,
语言自动识别就从这儿奠基。

人具慧眼,
软、硬件也配备有“扫描器”,
对输入计算机的语句进行“扫视”,
由左而右、从右至左、双向扫描,方式各异。
一边扫描,一边分析,
读到字符,拚成单词,“规约”成句。
扫描到哪儿,怎样得知?
根据文法,自有规律。
一支竹子,关节若干,
一个句子,亦有标记。
用”“状态-符号”偶描述扫描动态,
按文法拟定好扫描的轨迹。
状态:刻划扫描器当前处在某语法成分;
符号:是行将读到的字迹。
“已经具有的形式”加上“将要具有的形式”,
这就把扫描的当前位置确定无疑。
此谓语法制导进行编译,
“状态矩阵法”也是相近术语。

究竟是自动机 X 先“追求”文法 Y ?
还是文法 Y 相中了 X 自动机?
这儿只不过是借语搪塞,
无心回答这玩笑似的问题。
心中涌上一个幼稚的冲动:
语言和自动机的创新有无穷情趣!
根据需要放胆设计新语言,
根据语言自信研制自动机。
面向各类问题的新语言不断涌现,
原有的语言也在扩充自己的含义。
看语言和自动机携手并进,
计算机智能日新月异!

Email: wzl@benzw.com

☆ 软件的魅力

