用算符优先法进行表达式分析

本文通过实验介绍了使用算符优先法进行表达式分析的方法,旨在理解算符优先分析法进行语法分析的过程。实验要求从键盘输入表达式,通过算符优先法求值,遇到错误则给出提示。算法描述包括初始化操作数栈,按优先级处理运算符,进行计算并检查错误。代码实现部分提到了与词法分析器的结合,提供了工程文件组织的指引。
摘要由CSDN通过智能技术生成

用算符优先法进行表达式分析

实验目的

了解用算符优先分析法进行语法分析的方法。

实验内容要求

从键盘输入表达式,利用算符优先分析法求出其值,如输入表达式有错,则给出报错提示。表达式以;结尾。例:以于如下的输入表达式串: 13+5*4;则应给出结果为33。

实验原理

我们要分析的表达式满足下面的算符优先矩阵
在这里插入图片描述

算法描述

为实现算符优先算法,可以使用两个工作栈。一个叫做OPTR,用以寄存运算符,一个叫OPND,用以寄存操作数或结果。算法描述如下:

[1]首先置操作数栈为空栈,将表达式起始符;作为运算符栈的栈底元素。
[2]依次读入表达式中每个单词,若是操作数则进OPND栈,若是运算符则转[3]。
[3]将此运算符θ1与OPTR栈顶元素θ2进行比较,即查上表,    若 θ1>θ2,则:θ1进栈,转[2]
 若 θ1=θ2 ,如θ1为;,则分析成功,否则OPTR栈顶元素出栈,并转[2]
 若 θ1<θ2,则出栈OPND栈顶元素至b,又出栈其栈顶元素至a,出栈OPTR栈顶元素至t,进行运算r=a t b(t 为运算符),并将结果r存入栈OPND后转[3]。
 若θ1和θ2之间无优先关系,则报错。

代码实现

利用以前实验生成的Getsym()进行单词识别,并自组织工程文件,这部分先参照我主页里的《手工生成PL/0语言词法分析器》文档来进行代码衔接。关于算符优先算法要用到的部份函数提示如下。

[1]一些自定义的变量和函数的声明
#define MAX 255

SYMBOL title[7]= {
   PLUS,MINUS,TIMES,SLASH,LPAREN,RPAREN,SEMICOLON}; //用来将相应的种别码与数组下标进行映射
char oo[7][7]={
    {
   '>','>','<','<','<','>','>'},
		{
   '>','>','<','<','<','>','>'},
		{
   '>','>','>','>','<','>','>'},
		{
   '>','>','>','
算符优先是一种常用的语分析,可以用于解析表达式、语句等。在实验中,我们用算符优先分析表达式,主要步骤如下: 1. 定义运算符优先关系:根据表达式的语规则和运算符的优先级,我们可以定义相应的运算符优先关系表。例如,对于加减乘除四种运算符,我们可以定义如下的优先级关系表: | | + | - | * | / | ( | ) | | ----- | ----- | ----- | ----- | ----- | ----- | ----- | | + | > | > | < | < | < | > | | - | > | > | < | < | < | > | | * | > | > | > | > | < | > | | / | > | > | > | > | < | > | | ( | < | < | < | < | < | = | | ) | > | > | > | > | | > | 2. 将表达式转换为文规则:根据运算符优先关系,我们可以将表达式转换为文规则。例如,对于表达式 3 + 4 * 5,我们可以将其转换为文规则 E -> E + T | T,T -> T * F | F,F -> ( E ) | num,其中 num 代表数字。 3. 编写算符优先分析程序:根据文规则和运算符优先关系,我们可以编写算符优先分析程序,程序的主要思路是维护两个栈,一个存储符号,一个存储数字,通过比较栈顶符号的优先级来决定相应的操作,例如移进、规约等。 4. 进行分析:在程序执行过程中,我们可以根据输入符号的顺序逐步进行分析,如果输入符号与文规则不符,则分析失败,否则继续进行分析,最终得到表达式的语树。 通过实验,我们可以深入了解算符优先的工作原理和实现方,加深对语分析的理解和掌握,同时也可以提高自己的编程能力和代码实现能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值