文法是干什么的?
来源:互联网 发布:手机自动配音软件 编辑:程序博客网 时间:2024/06/02 09:40
学编译原理肯定会接触到文法,那么文法是干什么的,这个问题困扰了我好几天。今天终于有了初步的答案,拿出来和大家分享一下。
我的解答很简单,相信你看完会明白,更深层次的知识大家可以看书。
文法是用来定义语言的规则的,如一般自然语言的句子的结构是:
名词短语+动词短语+句号
动词短语=动词+名词短语
如:周瑜打黄盖。 我是中国人。 等等
现在来产生一句话:“乔布斯是CEO。”,如下图
为了简单起见,我们假设某个文法只有上述简单元素构成
那么它的组成可以定义为G={Vn,Vt,S,P}
上图中类似“<名词短语>”的是非终结符,类似于“乔布斯”的是终结符
VN={<句子>,<名词短语>,<动词短语>,<句号>,<动词>}
VT={乔布斯,CEO,是,。}
S=<句子>
P={
<句子>→<名词短语><动词短语><句号>
<名词短语>→乔布斯|CEO
<动词短语>→<动词><名词短语>
<动词>→是
<句号>→。
}
所以:
- 非终结符是用来构造语法的,是语法范畴的符号,不出现在最终的句子中,可以用它们和终结符构成句型,如:乔布斯 是 <名词短语>
- 最终的句子中只有终结符
- 凡是能通过S最终推导出最终全是终结符的字符串都是符合该文法的句子
怎么样,有点感觉了没有。
- 文法是干什么的?
- 到底是干什么的
- 程序员是干什么的
- csdn 是干什么的??
- FastDFS 是干什么的?
- HttpContext是干什么的
- HttpContext是干什么的
- struts 是干什么的
- HttpContext是干什么的
- 主板驱动是干什么的?
- libx264是干什么的?
- javaldx是干什么的
- module是干什么的?
- 项目经理是干什么的
- HttpContext是干什么的
- MTD是干什么的
- HttpContext是干什么的
- 你是干什么的
- JSP调用EJB
- Divide a number by 3 without using *, /, +, -, % operators
- 置换群快速幂 学习小结 #by nobody
- return与exit()
- 花生壳+Win7+tomcat+adsl搭建服务器,外网可以访问JAVA项目的页面
- 文法是干什么的?
- 静下心来写算法(之单向链表)
- 关于EJB使用中的一些设计模式的说明
- 我最真实的理解
- java文件切割
- LeetCode: Pow(x, n)
- Android之Service与IntentService的比较
- 二分算法解析~~
- UDP中使用connect