首页 > 编程知识 正文

c语言中e的使用方法,c语言词法分析器

时间:2023-05-06 06:02:59 阅读:110123 作者:198

算术表达式的ll(1)语法分析器

张会霞

(辽宁师范大学计算机与信息技术学院,辽宁大连116000 ) )。

摘要:语法分析是编译器的核心部分,对其进行研究具有重要意义。 本文介绍了编译过程句法分析阶段使用的ll(1)预测分析法的相关概念,并以算术表达式为例详细论述了ll(1)句法分析器的构成和具体实现。

关键词:语法分析; 算术表达式; ll(1)语法ll(1)语法分析器;

arithmeticexpressionsofll(1)参数

张惠霞

(collegeofcomputerandinformationtechnology,Liaoning Normal University,Dalian Liaoning 116000,China )

abstract 3360 syntaxanalysisisthecorepartofcompiler.itisofgreatsignificancetostudyit.thispaperintroducestherelevantconcepts pts ntheparsingstageofcompilationprocess,andtakesarithmeticexpressionsforexampletoelaboratethestruccess

Key words:syntax analysis; arithmetic expressions; ll(1) grammar; ll(1)密码

前言

编译器极大地推动了计算机的发展,现已成为计算机系统的重要组成部分。 句法分析(Syntax Analysis )是编译器的第二阶段,是核心功能之一,其主要任务是根据语法规则检查词法分析器输出的词串是否是该语言语法的正确句子[1]。 在语法分析阶段,比较常见的方法主要分为自上而下和自下而上两种,其中ll(1)预测分析法是一种自上而下的语法分析方法,因其易于直观判定、执行效率高而得到广泛应用。 本文阐述了ll )语法的特点和ll )分析表结构的预测方法,并设计了ll )分析仪来判断某个句子是否符合算术语法的语法规则,输出语法分析过程。

1ll(1)语法

自顶向下的语法分析方法是从语法的开始符号开始,重复使用生成式导出与输入符号串完全一致的句子[2]。 但是,由于在同一生成式的左部分可能出现多个不同的右部分,也就是多个候补式,所以在这种情况下,解析器不能从现在的输入符号中唯一地决定并置换生成式,从而产生回溯现象,程序的效率大幅降低。 另外,即使逐一探索回溯现象,包含左归式的语法也无法正常进行语法分析,会进入死循环状态。 因此,为了避免左递归和回溯现象,语法有一定的局限性,即需要对通过构建ll(1)语法决定的自上而下的语法分析。

ll )1)中的前l表示从左向右扫描单词符号串,第二l表示最左边导出,即每次都用生成式的右部置换符号串最左边的非终端符号,1表示在分析时右手只看一个符号。 ll(1)语法的具体定义是,某个语法g中不包含左递归,语法中各非终端符号a的各生成式的候补前缀组两个都不相交,而且对于语法中的各非终端符号a,某个候补前缀组中包含,first(a ) follow )

2ll(1)语法分析器

ll )1)句法分析器是完成句法分析的核心部分。 如图1所示,它由预测分析表table、先进的后面的分析堆栈s、预测分析控制程序三部分构成。 分析表table为二维数组,算术语法的非终端符号构成分析表的行标题,终端符号和输入终端符号#构成分析表的列标题。 在二维数组要素table[E][i]中,存储了表示当前分析堆栈的堆栈顶部为e、当前的输入字符为I、下次使用的生成式为table[e]的生成式或错误标志的分析堆栈s中存储了语法符号,语法和符号控制程序是基于分析表和分析栈控制整个语法分析的过程,分析栈、栈顶元素和符号串的当前输入字符决定下一步的操作。

照片

1ll(1)分析器模型

3ll(1)句法分析器的具体实现——以——算术表达式为例

3.1设计ll(1)语法

因为ll(1)句法分析器的实现是针对ll(1)语法进行的,所以在进行预测分析之前,需要判断给定的语法是否是ll(1)语法,否则,就对给定的语法进行左共同因子的提取和左递归的消除操作,从而进行非lli 本文以简单的算术表达式语法为例,消除左递归后,得到的语法结果如下。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。