种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

当前算符

(2019-10-29 08:02:40) 百科综合
当前算符

当前算符

算符使问题从一种状态变化为另一种状态的手段。算符在单独存在时是没有什幺意义,在计算机科学中,算符是指运算符号或逻辑符号等。当前算符是指计算机当前要处理运算符,当前算符的选择一般与运算符优先权和一些其他规则有关。

基本介绍

  • 中文名:当前算符
  • 外文名:current operator
  • 学科:计算机
  • 定义:计算机当前要处理运算符
  • 有关术语:算符
  • 领域:计算机编程

简介

在计算机科学中,规定了某种运算的符号称为算符。算符用于运算对象进行运算,不同算符,所进行的操作是不同的,因此,算符的不同,导致运算对象的运算结果是不同的。当前算符是指计算机正在处理的算符或计算机或程式当前要选择处理的算符。当前算符现在一般多指计算机或程式要选择运行的算符。当前算符选择主要算符优先权和计算机或程式一些设定规则有关。当前算符在很多领域都有套用,例如编译原理中算符优先分析法。

运算符优先权

在一个表达式中可能包含多个有不同运算符连线起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。
优先权从上到下依次递减,最上面具有最高的优先权,逗号操作符具有最低的优先权。表达式的结合次序取决于表达式中各种运算符的优先权。优先权高的运算符先结合,优先权低的运算符后结合,同一行中的运算符的优先权相同。
优先权从上到下依次递减,最上面具有最高的优先权,逗号操作符具有最低的优先权。
相同优先权中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先权是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
基本的优先权需要记住:
指针最优,单目运算优于双目运算。如正负号。
先乘除(模),后加减。
先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.
逻辑运算最后计算。

算符优先分析法

概述

算符优先分析是一种典型的自下而上的语法分析法, 算符优先分析法的文法基础是算符文法, 并且严格地按终结符的优先关係进行规约,这是算符优先分析法对文法要求的严格性。算术表达式在文法的定义上以及优先关係的直观理解上容易满足算符优先分析法对文法和优先关係的要求, 所以人们通常把算符优先分析法用在算术表达式的语法分析上, 而对于其它形式文法由于其难以直接满足条件而较少套用。
算符优先分析法是指它只考虑算符(终结符)之间的优先关係,分析扫描每个规约式的算符间优先关係。算符优先分析法的关键是比较两个相继出现的终结符号的优先权而决定应採取的动作。要完成算符间的优先权比较,就要先定义各种可能出相继出现的运算符的优先权,并将其表示成矩阵形式,在分析过程中通过查询矩阵元素而得算符间的优先关係。对于任何两个相继出现的终结符号a和b具有形式:“…ab…”或 “…aQb…”,Q为非终结符,定义a,b间的如下三种关係为:
1) a〈ba的优先级低于b
2) a=b a的优先权等于b
3) a>b a的优先权高于b
如果a和b在任何情况下不可能相继出现,则a,b之间无关係。

算符文法

算符文法:即它的任一产生式的右部都不含两个相继的非终结符的文法。如果G是一个不含空字元的算法文法,那幺只要它的任一对终结符都至多只满足>,=,<的关係的其中一种,则称g是一个算符优先文法。< p=""><!--的关係的一种,则称g是一个算符优先文法。
定义1:设有一文法G,如果G中没有形如A…BC…的产生式,其中B和C为非终结符号,则称G为算符文法。
算符文法的产生式右部不包含两个相继的非终结符号,保证了两个运算间只有一个运算元,这正是算符文法所要求的句型。
定义2:设G是一个算符文法,a和b是任意两个非终结符,A,B,C是非终结符。算符优先关係=、>、<定义如下:
(1)a=b,若且唯若G中含有形如A->…ab…或A->…aBb…的产生式;
(2)a<b, 若且唯若G中含有形如A->…aA…的产生式,而B-〉b…或B->Ab…;
(3)a>b, 若且唯若G中含有形如A->…Bb…的产生式,而B->…a或B->…aA;

算符优先法的构造

算符优先法包含三个要素:算符优先表、栈和分析程式。下面以简化的表达式文法为例介绍算符优先法的构造过程。简化的表达式文法 G[E]如下:
E→E+T|T
T→T*F|F
F→i|(E)
可证明文法 G[E]为算符优先文法。构造文法 G[E]的算符优先表如表1。
当前算符
算符优先法的分析程式是通用的,其算法如图下。
k:=1;s[k]:=’#’; /*数组 s[]为栈, k 为栈指针*/
REPEAT
把下一输入符号读入 a;
IF s[k]∈V T THEN j:=k ELSE j:=k-1; /*取栈顶运算符*/
WHILE s[j]>a DO /*若栈顶运算符 s[j]的优先权高于读入运算符的优先权,则说明栈中有句柄,找到句柄进行归约*/
BEGIN
REPEAT
Q:=s[j];
IF s[j-1]∈V T THEN j:=j-1 ELSE j:=j-2
UNTIL s[j]<Q
把 s[j-1]…s[k]归约为 N; /*s[j-1]…s[k]为句柄*/
k:=j+1;
s[k]:=N
END;
IF s[j]<a OR s[j]=a THEN /*若栈顶运算符 s[j]优先权低于或等于读入运算符 a 的优先权,则 a 入栈*/
BEGIN k:=k+1;s[k]:=a END.
UNTIL a=’#’
算符优先析法的错误诊断恢复机制的构造使用算符优先法进行语法分析时,出现下面两种情况,则发生错误:
(1) 若栈顶算符与当前输入符号间不存在优先关係;
(2) 若找到某一句柄,但不存在任一产生式,其右部与此句柄形式吻合。

标 签

搜索
随机推荐

Powered By 种豆资源网||