ext keyword

This commit is contained in:
corey 2023-12-20 09:00:01 -06:00
parent 78f4078880
commit 28779da851
4 changed files with 15 additions and 4 deletions

2
lex.c
View File

@ -14,7 +14,7 @@ const char*lextype_names[]={"LNONE","LIDENTIFIER","LINTEGER","LFLOAT","LSTRING",
const char*lextype_colors[]={"\033[0m","\033[0m","\033[36m","\033[35m","\033[32m","\033[0m","\033[33m","\033[34m"};
const char*lexsubtype_names[]={"LENDSTATEMENT","LASSIGN","LLPAREN","LRPAREN","LLCBRACE","LRCBRACE","LSMINUS","LADD","LSMUL","LSDIV",NULL};
static const char*operator_chars="-+*/=;(),.{}<>\\";
static const char*keywords[]={"do","false","fn","for","if","let","ret","true","while","call","asm",};
static const char*keywords[]={"do","false","fn","for","if","let","ret","true","while","call","asm","ext",};
/* static char*operators[]={";","=","+=","-=","*=","/=","+","-","/","*","(",")","{","}"}; */
Lexer lex_new(void)

View File

@ -7,7 +7,7 @@
#include"mem.h"
#include"state.h"
const char*partype_names[]={"PNONE","PEMPTY","PEXPRESSION","PSTATEMENT","PASSIGNMENT","PIF","PCOMMENT","PBLOCK","PWHILE","PVARDECL","PFUNDECL","PRET","PCALL","PASM",NULL};
const char*partype_names[]={"PNONE","PEMPTY","PEXPRESSION","PSTATEMENT","PASSIGNMENT","PIF","PCOMMENT","PBLOCK","PWHILE","PVARDECL","PFUNDECL","PRET","PCALL","PASM","PEXTERN",NULL};
Parser parser_new(void)
{
@ -213,6 +213,7 @@ void parser_parse(Parser*pnode,Vec*tokens)
else if(strcmp("let",cur_tok->str.buffer)==0){globalcode();++i;descend(PVARDECL);}
else if(strcmp("fn",cur_tok->str.buffer)==0){++i;descend(PFUNDECL);}
else if(strcmp("asm",cur_tok->str.buffer)==0){globalcode();++i;descend(PASM);}
else if(strcmp("ext",cur_tok->str.buffer)==0){globalcode();++i;descend(PEXTERN);}
break;
case LOPERATOR:
@ -312,7 +313,8 @@ void parser_parse(Parser*pnode,Vec*tokens)
else if(strcmp("let",cur_tok->str.buffer)==0){pnode->mode=PVARDECL;current_node->type=PVARDECL;break;}
else if(strcmp("ret",cur_tok->str.buffer)==0){pnode->mode=PRET;current_node->type=PRET;break;}
else if(strcmp("fn",cur_tok->str.buffer)==0){pnode->mode=PFUNDECL;current_node->type=PFUNDECL;break;}
else if(strcmp("asm",cur_tok->str.buffer)==0){pnode->mode=PFUNDECL;current_node->type=PASM;break;}
else if(strcmp("asm",cur_tok->str.buffer)==0){pnode->mode=PASM;current_node->type=PASM;break;}
else if(strcmp("ext",cur_tok->str.buffer)==0){pnode->mode=PEXTERN;current_node->type=PEXTERN;break;}
}
pushcurrenttoken();
//vec_pushta(&current_node->tokens,);

View File

@ -9,7 +9,7 @@
//#define vec_pushn(v,n) do{PNode x=n;vec_push(v,&x);}while(0)
typedef enum PARTYPE {PNONE, PEMPTY, PEXPRESSION, PSTATEMENT, PASSIGNMENT, PIF, PCOMMENT, PBLOCK, PWHILE, PVARDECL, PFUNDECL, PRET, PCALL, PASM, } PARTYPE;
typedef enum PARTYPE {PNONE, PEMPTY, PEXPRESSION, PSTATEMENT, PASSIGNMENT, PIF, PCOMMENT, PBLOCK, PWHILE, PVARDECL, PFUNDECL, PRET, PCALL, PASM, PEXTERN, } PARTYPE;
extern const char*partype_names[];

View File

@ -267,6 +267,15 @@ void gen_x86_64(Gen*gen,PNode*pn,FILE*file)
}
break;
case PEXTERN:
{
if(pn->tokens.size<1)
err_log("%u: expected identifier after keyword 'ext'",vec_at(&pn->tokens,0,const Tok*)->line);
else
fprintf(file,".extern %s\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
}
break;
case PCOMMENT:
fprintf(file,"\t;%s\n",vec_at(&pn->tokens,0,const Tok*)->str.buffer);
break;