- 3
- 0
- 约6.84千字
- 约 10页
- 2019-03-17 发布于湖北
- 举报
编译技术第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 strInput[nInputPtr] = 9)
{
Pop();
您可能关注的文档
最近下载
- 中小学生端午节假期安全教育主题班会PPT课件.pptx VIP
- 机器人等级考试三四级资料-第01课:初识Mixly和Fduino UNO.pptx VIP
- FULING富凌H200空压机中文说明书说明书用户手册.pdf
- Praat语音软件操作手册.docx VIP
- 2025-2026学年重庆市江津实验中学、田家炳中学、李市中学、白沙中学等金砖六校九年级(上)期末化学模拟试卷(含答案).pdf VIP
- 阿特拉斯•科普柯 冷冻式干燥机.pdf VIP
- 重庆市九龙坡区2024-2025学年九年级上学期期末考试数学试题(含答案与解析).pdf VIP
- 浙江省杭州市富阳区2023-2024学年三年级上学期数学期末试卷.docx VIP
- TXFQC-合成橡胶消防水带.pdf VIP
- 重庆市九龙坡区渝高教育集团2024-2025学年九年级上学期期末考试物理试题(含答案).pdf VIP
原创力文档

文档评论(0)