Meow语言开发记录-基础 (3)

啊姆,这几天都没学习呢,也没有敲代码,因为柠喵在搭建自己的Minecraft服务器,现在搭建好了,就来补一下,如果对柠喵的服务器感兴趣想和柠喵一起玩的话可以在文章底下留言~
其它的就说这些,柠喵要开始今天的学习啦。

文法定义

文法,指的就是某个语言中句子的构成规则,比如在自然语言的句子中,主语应该放在哪,谓语应该放在哪等等。

语法成分

语法成分,其实就是之前说过的,主语谓语什么的。用自然语言来举例,一个句子可以由一个名词短语和一个动词短语组成,而名词短语又可以由形容词和另外的名词短语组成,动词短语也可以由动词和另外一个动词短语构成,这些短语统称语法成分。

文法符号

名词可以是“柠檬”、“猫”、“手机”等等,动词可以是“敲”、“打”、“玩”等等,这些具体的词就叫做文法符号。

文法的形式化定义

我们可以用一个4元组(为什么说得这么专业呢?因为我是照抄的)来表示文法;
G=(VT, VN, P, S)
在这个G表示的就是文法了,VT表示终结符集合,VN表示非终结符集合,P表示产生式的集合,S表示句子的集合。

终结符和非终结符

终结符就是句子中无法再拆分的语法成分,是文法的基本符号,之前说过名词短语可以由形容词和另外一个名词短语构成,这里的形容词无法再拆分了,名词短语还可以继续拆分,所以形容词是终结符。而名词短语这样的可以再继续拆分的,就叫非终结符。

产生式

产生式,从名字上来理解,就是用来产生句子的式子,描述把终结符和非终结符组合成句子的方法(专业来说是组合成串,因为句子就是文法符号串)。
产生式的形式是这样的:
α -> β
这个式子读作阿尔法定义为贝塔,其中,α=(VT∪VN)+,β=(VT∪VN)*
我们来理解一下,终结符是一个字母表,非终结符也是一个字母表,它们的并集就也是一个字母表,这个字母表的正闭包就是各种句子(串),β是这个字母表的克林闭包(之前记的东西用上了),注意一下克林闭包的话就包括空串,问题来了,为什么α里不能有空串呢?因为空串是空的无法被文法符号定义啊。

开始符号

之前说S表示的是句子的集合,而这个句子本身就是最大的语法成分,没有更大的了,所以专业里叫做开始符号。

符号约定

(柠喵对照了一下书上的描述和课上的描述,觉得书上的描述更简洁一点)
我们一般用小写字母表示终结符,运算符属于终结符,我们用到的关键字也得是终结符,括号一类的也都是终结符,用大写字母表示非终结符。

结束

怎么感觉似懂非懂的样子,是因为概念太多的原因吗?柠喵打算明天试着用那种定义方法把Meow语言的文法定义给写出来,今天先这样了,啊,累死了呢(更加担心去学校之后能不能适应了)。
有件事还要再说一遍,如果对柠喵的服务器感兴趣的话请在文章底下留言哦~