㈠ 编译原理的终结符和非终结符如何理解
一、非终结符:
1、非终结符可以再分成更细的东西。
2、不是终结符的都是非终结符。非终结符可理解为一个可拆分元素,而终结符是不可拆分的最小元素。终结符号就是语言中用到的基本元素,名词、动词、形容词、助词等等基本语言单位。
二、终结符:
1、终结符直接就代表一个意思,比如关键字if就不能再分成i和f了。
2、通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导。非终结符则是"语法"中用到的元素,除非谈论"语法",一般交谈语言中并不会用到非终结符。比如:主语、短语、词组、句子。
(1)编译原理推导符号上是乘号扩展阅读:
终结符和非终结符在计算机科学和语言学的领域是用来指定推导规则的元素。在某个形式语法之中,终结符和非终结符是两个不交的集合。
从形式语言中定义看,终结符(T)就是不可再分的字符或串。而非终结符(N)是一个递归形式的定义:由终结符和至少一个非终结符号组成的串。
如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误的发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。
需要注意的是,一般上编译器只做语法检查和最简单的语义检查,而不检查程序的逻辑。
网络-终结符
网络-编译
㈡ 【编译原理】第二章:语言和文法
上述文法 表示,该文法由终结符集合 ,非终结符集合 ,产生式集合 ,以及开始符号 构成。
而产生式 表示,一个表达式(Expression) ,可以由一个标识符(Identifier) 、或者两个表达式由加号 或乘号 连接、或者另一个表达式用括号包裹( )构成。
约定 :在不引起歧义的情况下,可以只写产生式。如以上文法可以简写为:
产生式
可以简写为:
如上例中,
可以简写为:
给定文法 ,如果有 ,那么可以将符号串 重写 为 ,记作 ,这个过程称为 推导 。
如上例中, 可以推导出 或 或 等等。
如果 ,
可以记作 ,则称为 经过n步推导出 ,记作 。
推导的反过程称为 归约 。
如果 ,则称 是 的一个 句型(sentential form )。
由文法 的开始符号 推导出的所有句子构成的集合称为 文法G生成的语言 ,记作 。
即:
例
文法
表示什么呢?
代表小写字母;
代表数字;
表示若干个字母和数字构成的字符串;
说明 是一个字母、或者是字母开头的字符串。
那么这个文法表示的即是,以字母开头的、非空的字符串,即标识符的构成方式。
并、连接、幂、克林闭包、正闭包。
如上例表示为:
中必须包含一个 非终结符 。
产生式一般形式:
即上式中只有当上下文满足 与 时,才能进行从 到 的推导。
上下文有关文法不包含空产生式( )。
产生式的一般形式:
即产生式左边都是非终结符。
右线性文法 :
左线性文法 :
以上都成为正则文法。
即产生式的右侧只能有一个终结符,且所有终结符只能在同一侧。
例:(右线性文法)
以上文法满足右线性文法。
以上文法生成一个以字母开头的字母数字串(标识符)。
以上文法等价于 上下文无关文法 :
正则文法能描述程序设计语言中的多数单词。
正则文法能描述程序设计语言中的多数单词,但不能表示句子构造,所以用到最多的是CFG。
根节点 表示文法开始符号S;
内部节点 表示对产生式 的应用;该节点的标号是产生式左部,子节点从左到右表示了产生式的右部;
叶节点 (又称边缘)既可以是非终结符也可以是终结符。
给定一个句型,其分析树的每一棵子树的边缘称为该句型的一个 短语 。
如果子树高度为2,那么这棵子树的边缘称为该句型的一个 直接短语 。
直接短语一定是某产生式的右部,但反之不一定。
如果一个文法可以为某个句子生成 多棵分析树 ,则称这个文法是 二义性的 。
二义性原因:多个if只有一个else;
消岐规则:每个else只与最近的if匹配。
㈢ 乘法符号是什么呢
乘号符号有三种表示方式,一种是叉号“×”,一种是“·”,还有就是“*”。
以“·”表示乘法的用法相扮并当流行,现今欧洲大陆派(德、法等国)规定以“·”作乘号。其他国家则以“×”作乘号,“·”为小数点。而我国则规定以“×”或“·”作乘号都可,一厅激迹般于字母或括号前的铅余乘号可略去。
乘法的计算法则:
(1)数位对齐,从右边起,依次用第二个因数每位上的数去乘第一个因数,乘到哪一位,得数的末尾就和第二个因数的哪一位对齐。
(2)把几次乘得的数加起来,整数末尾有0的乘法,可以先把0前面的数相乘,然后看各因数的末尾一共有几个0,就在乘得的数的末尾添写几个0。
㈣ 乘号的符号是什么
乘号的符号是*,*还表示除0之外的数。
我们现在常用于乘法运算的符号有两个,一个是“×”,另一个是“·”, “×”是由1631年英国数学家奥雷特最早提出的,“·”是由英国数学家赫锐奥特首创的。
而德国数学家莱布尼茨则认为,“×”号与拉丁字母表示未知数的“X”很像,运算时容易混淆,因此加以反对,但他赞成用“·”来替代“×”,因此德国的数学书中仔歼,乘号与世界其他国家是不一样的。
乘法的计算法则:
1、首位相同,两尾数和等于10的两位数相乘方法:十位数加1,得出的和与十位数相乘,得数为前积,个位数相乘,得数为后积,没有十位用0补。
2、首位相同,尾数和不等于10的两位数相乘方法:两首位相乘(即求首位的平方),得数作为前积,两尾数的和与首位相乘,得数作为中积,满十进一,两尾数相乘,得数作为后积。
3、被乘数首尾相同,乘数首尾和是10的两位数相乘方法:乘数首位加1,得出的和与被乘数首位相乘,得数为前积轿铅,两尾数相乘闭戚好,得数为后积,没有十位用0补。
4、被乘数首尾和是10,乘数首尾相同的两位数相乘方法:与帮助6的方法相似。两首位相乘的积加上乘数的个位数,得数作为前积,两尾数相乘,得数作为后积,没有十位补0。
㈤ *表示什么意思
星形标示号*通常置于有关的词句的左上角或右上角,作为划分文章陵蔽不同部分的符号成组使用时单独占一行。在电脑中,由于乘号“×”容易和字母x混淆,所以使用*来代替乘号。
字符:*
中文名称:米字号、星野余号、乘号。
别称:子弹洞(酷似子弹打到物品的效果)。
电脑输入方法:按下shift键,并点大键盘上的数字8键;数字键盘上-号旁为*号。也可先按Alt键,然后按p,按两次;也可以在键盘的数字区找到(有些HP键盘可以)。
电话按键
“*”一般为暂停键,基础型脉冲按键电话机中大都附有这种“*”键。用户打外线时,如打不通,则使用“*”键,等听到公共网的拨号音(二次拨号音)再放开,公共网自动交换机才能正确动作。
如只照上面所述办法使用“尺脊州#”重发键,而不按“*”键暂停,万一公共网交换机的拨号音来慢了,就要发生不正确的动作。
以上内容参考 网络——*
㈥ 编译原理,求详解A*和A+代表什么意思
V是一个符号集合,假设V指的是三个符号a,
b,
c的集合,记为
V
=
{a,
b,
c
}
V*
读作“V的闭包”,它的数学定义是V自身的任意多次自身连接(乘法)运算的积,也是一个集合。
也就是说,用V中的任意符号进行任意多次(包括0次)连接,得到的符号串,都是V*这个集合中的元素。
0次连接的结果是不含任何符号的空串,记为
ε
1次连接就是只有一个符号的符号串,比如,a,b,
c
2次连接是两个符号构成的符号串,比如,aa,
ab,
ac,
ba,
bb,
bc,等等
……
㈦ 请教各位大侠乘号与指针在编译的时候是怎么区别的
自动区别的,指针的优先级更高
㈧ c语言中的运算课本上乘号是米子符号考试时候怎么写
写*和×都可以,一般直接写* 在计算机编程时候用*号,保持习惯