- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译技术第5次上机内容
目的:充分理解语义分析的方法及相关语义计算的执行时机。
要求:
1.以S属性的语法制导定义为基础,将下表的语义规则嵌套在语法分析的过程中,即实现语法制导的翻译过程。
产 生 式 语 义 规 则 L ( E n print (E.val) E ( E1 + T E.val := E1 .val + T.val E ( T E.val := T.val T ( T1 * F T.val := T1.val * F.val T ( F T.val := F.val F( (E) F.val := E.val F ( digit F.val := digit.lexval 2.以词法分析和语法分析部分的上机结果为基础,添加语义分析部分。即以LR文法为基础。当进行产生式归约时执行对应的语义动作。
3.输入:
5+3+8*2
输出:24
4. 若输入有误,如:3++2
则应提示:重新输入!
5. 由于输入串是具体的数值,因此应调用相应的词法分析的功能。
// Expression.cpp : Defines the entry point for the console application.
//
#include stdafx.h
#include conio.h
#includestring.h
#includeiostream
#includestack
using namespace std;
#define L 0
#define E 1
#define T 2
#define E_ 3
#define T_ 4
#define F 6
#define digit 7 // 数字
#define add 8 // 左括号
#define mul 9 // 右括号
#define lb 10
#define rb 11
int nStackPtr;
int Stack[100]; // 栈
void guiyue(stackint state,stackint value,char nex);
void Push(int n)
{
nStackPtr ++;
Stack[nStackPtr] = n;
}
void Pop()
{
nStackPtr--;
}
void PrintStack()
{
int i;
for (i = nStackPtr; i = 0; i--)
{
if (Stack[i] == E) printf(E );
if (Stack[i] == E_ ) printf(E );
if (Stack[i] == T ) printf(T );
if (Stack[i] == T_ ) printf(T );
if (Stack[i] == F) printf(F );
if (Stack[i] == digit) printf(digit );
if (Stack[i] == add) printf(+ );
if (Stack[i] == mul) printf(* );
if (Stack[i] == lb) printf(( );
if (Stack[i] == rb) printf() );
}
printf(\n);
}
/////////////////////////////////////////////////////////////////
// 利用栈来分析表达式串,判定表达式串是否正确
//
/////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
char strInput[100]; // 存放表达式串
bool bResult;
int nInputPtr;
nStackPtr = -1;
nInputPtr = 0;
bResult = true;
// 输入表达式串,存放在 strInput中
printf(请输入表达式串:);
scanf(%s,strInput);
Push(E);
PrintStack();
while (bResult nStackPtr = 0)
{
switch(Stack[nStackPtr])
{
case E:
if (strInput[nInputPtr] = 0 strIn
您可能关注的文档
- 玉柴集团数据中心机房资产管理系统解决方案161123解读.doc
- 中小企业万户小老板信息化汇报材料详解.ppt
- 粤西“四校”2016届高三上学期第二次联考(理综)解读.doc
- 实验五 变质岩及其结构、构造精要.doc
- 必威体育精装版海口科目三考试规则2016年4月1日起至今讲述.docx
- 必威体育精装版最实用四年级下册语文32渔夫的故事讲述.ppt
- 漳州历史课件精美解读.ppt
- 必威体育精装版版2016年南京职称计算机考试题库(10套)讲述.doc
- 照明案例分析解读.pptx
- 珍惜青春年华,树立远大理想解读.ppt
- 2024年江西省高考政治试卷真题(含答案逐题解析).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)物理试卷(含答案详解).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)地理试卷(含答案详解).pdf
- 2024年内蒙通辽市中考化学试卷(含答案逐题解析).docx
- 2024年四川省攀枝花市中考化学试卷真题(含答案详解).docx
- (一模)长春市2025届高三质量监测(一)化学试卷(含答案).pdf
- 2024年安徽省高考政治试卷(含答案逐题解析).pdf
- (一模)长春市2025届高三质量监测(一)生物试卷(含答案).pdf
- 2024年湖南省高考政治试卷真题(含答案逐题解析).docx
- 2024年安徽省高考政治试卷(含答案逐题解析).docx
文档评论(0)