91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

編譯原理最后一次作業,在詞法分析、語法分析、語義分析、中間代碼基礎上實現目標代碼。壓縮包里有源代碼,實驗報告和技術文檔。

資源截圖

代碼片段和文件信息

#include?“dst_code.h“?
typedef?struct?var_loc
{
char?name[32];
int?loc;
}var;

static?code_node*?head;
FILE*?fp;
static?int?arg_count=0;
static?int?size=0;
static?int?count=0;
static?var?table[1024];

int?var_get(char*?name)
{
if(name[0]==‘#‘)return?-1;
if(name[0]==‘*‘||name[0]==‘&‘)name++;
for(int?i=0;i {
if(strcmp(nametable[i].name)==0)
return?table[i].loc;
}
return?-1;
}
void?var_add(char*?nameint?sz)
{
if(name[0]==‘#‘)return;
if(name[0]==‘*‘||name[0]==‘&‘)name++;
if(var_get(name)!=-1)return;
table[count].loc=size;
size+=sz;
strcpy(table[count].namename);
count++;
}
void?prep_reg(char*?nameint?num)
{
char?temp[8];
sprintf(temp“$t%d“num);
if(name[0]==‘*‘)
{
fprintf(fp“lw?%s%d($sp)\n“tempvar_get(name));
fprintf(fp“add?%s%s$sp\n“temptemp);
fprintf(fp“lw?%s0(%s)\n“temptemp);
}
else?if(name[0]==‘&‘)
{
fprintf(fp“li?%s%d\n“tempvar_get(name));
}
else?if(name[0]==‘#‘)
{
fprintf(fp“li?%s%s\n“temp&name[1]);
}
else
{
fprintf(fp“lw?%s%d($sp)\n“tempvar_get(name));
}
}

//翻譯一個函數,兩參數左閉右開。
void?gen_one_function(code_node*?begincode_node*?end);
void?gen_dst_code(code_node*?hFILE*?f)
{
head=h;
fp=f;
fprintf(fp“%s\n““.data“);
fprintf(fp“%s\n““_prompt:?.asciiz?\“Enter?an?integer:\““);
fprintf(fp“%s\n““_ret:?.asciiz?\“\\n\““);
fprintf(fp“%s\n““.globl?main“);
fprintf(fp“%s\n““.text“);
fprintf(fp“%s\n““read:“);
fprintf(fp“%s\n““li?$v0?4“);
fprintf(fp“%s\n““la?$a0?_prompt“);
fprintf(fp“%s\n““syscall“);
fprintf(fp“%s\n““li?$v0?5“);
fprintf(fp“%s\n““syscall“);
fprintf(fp“%s\n““jr?$ra“);
fprintf(fp“%s\n““write:“);
fprintf(fp“%s\n““li?$v0?1“);
fprintf(fp“%s\n““syscall“);
fprintf(fp“%s\n““li?$v0?4“);
fprintf(fp“%s\n““la?$a0?_ret“);
fprintf(fp“%s\n““syscall“);
fprintf(fp“%s\n““move?$v0?$0“);
fprintf(fp“%s\n““jr?$ra“);
code_node*?p=head*q;
do
{
q=p->next;
while(1)
{
if(strcmp(q->args[0]“FUNCTION“)==0)
break;
else?if(q==head)?break;
q=q->next;
}
gen_one_function(pq);
p=q;
}while(p!=head);
}
void?gen_one_function(code_node*?begincode_node*?end)
{
count=0;
size=0;
arg_count=0;
fprintf(fp“%s:\n“begin->args[1]);
code_node*?p=begin->next;
while(p!=end)
{
switch(p->args_count)
{
case?2:
{
if(strcmp(“GOTO“p->args[0])!=0)
var_add(p->args[1]4);
break;
}
case?3:
{
if(strcmp(p->args[1]“:=“)==0)
{
var_add(p->args[0]4);
var_add(p->args[2]4);
}
else?if(strcmp(p->args[0]“DEC“)==0)
{
int?a=strtol(p->args[2]NULL10);
var_add(p->args[1]a);
}
break;
}
case?4:
{
var_add(p->args[0]4);
break;
}
case?5:
{
var_add(p->args[0]4);
var_add(p->args[2]4);
var_add(p->args[4]4);
break;
}
case?6:
{
var_add(p->args[1]4);
var_add(p->args[3]4);
break;
}
default:;
}
p=p->next;
}
fprintf(fp“addi?$sp?$sp?-%d\n“size);
p=begin->next;
while(p!=en

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????398478??2018-01-17?21:50??201511210132_孔令芝_目標代碼生成\201511210132_孔令芝實驗五報告.docx

?????文件???????8947??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\bison.y

?????文件???????6835??2018-01-17?18:39??201511210132_孔令芝_目標代碼生成\代碼\Code\dst_code.c

?????文件?????????64??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\dst_code.h

?????文件???????3446??2018-01-17?18:34??201511210132_孔令芝_目標代碼生成\代碼\Code\flex.l

?????文件??????13932??2018-01-17?18:39??201511210132_孔令芝_目標代碼生成\代碼\Code\ir_buffer.c

?????文件???????1338??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\ir_buffer.h

?????文件??????54052??2018-01-17?20:05??201511210132_孔令芝_目標代碼生成\代碼\Code\lex.yy.c

?????文件????????876??2018-01-17?20:05??201511210132_孔令芝_目標代碼生成\代碼\Code\Makefile

?????文件??????20144??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\semantics.c

?????文件?????????75??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\semantics.h

?????文件???????6725??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\symbols.c

?????文件???????4629??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\symbols.h

?????文件??????14817??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\translate.c

?????文件?????????86??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\translate.h

?????文件???????2020??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\tree.c

?????文件???????1160??2015-12-07?01:44??201511210132_孔令芝_目標代碼生成\代碼\Code\tree.h

?????文件????????661??2018-01-17?21:58??201511210132_孔令芝_目標代碼生成\代碼\Readme.txt

?????文件????????807??2018-01-17?16:49??201511210132_孔令芝_目標代碼生成\代碼\Test\test4.1.asm

?????文件????????139??2018-01-17?00:26??201511210132_孔令芝_目標代碼生成\代碼\Test\test4.1.c

?????文件???????1115??2018-01-17?16:50??201511210132_孔令芝_目標代碼生成\代碼\Test\test4.2.asm

?????文件????????203??2018-01-17?00:26??201511210132_孔令芝_目標代碼生成\代碼\Test\test4.2.c

?????目錄??????????0??2018-01-17?21:58??201511210132_孔令芝_目標代碼生成\代碼\Code

?????目錄??????????0??2018-01-17?21:53??201511210132_孔令芝_目標代碼生成\代碼\Test

?????目錄??????????0??2018-01-17?21:58??201511210132_孔令芝_目標代碼生成\代碼

?????目錄??????????0??2018-01-17?21:58??201511210132_孔令芝_目標代碼生成

-----------?---------??----------?-----??----

???????????????540549????????????????????26


評論

共有 條評論