lr/ir.c

51 lines
837 B
C

/********
* Generate intermediate
* representation for
* further target code
* generation
********/
#include<stdio.h>
#include<stdlib.h>
#include"ir.h"
#include"state.h"
void gen_ir(Gen*gen,const PNode*pn,FILE*file)
{
if(!pn)
{
err_log("NULL PNode passed to gen_ir");
return;
}
if(!file)
{
err_log("NULL FILE* passed to gen_ir");
return;
}
switch(pn->type)
{
case PCOMMENT:
printf("; %s\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
break;
case PFUNDECL:
printf("%s:\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
break;
default:
break;
}
for(size_t i=0;i<pn->pnodes.size;++i)
gen_ir(gen,vec_at(&pn->pnodes,i,const PNode*),file);
if(pn->tokens.size>0)
{
for(size_t i=0;i<pn->tokens.size;++i)
printf("%s ",vec_at(&pn->tokens,i,const Tok*)->str.buffer);
puts("");
}
}