pnode: allow global asm,ext, lex: LSCOLON
This commit is contained in:
parent
aa8fce2ca1
commit
07bc6a1461
5
lex.c
5
lex.c
|
@ -12,8 +12,8 @@
|
|||
|
||||
const char*lextype_names[]={"LNONE","LIDENTIFIER","LINTEGER","LFLOAT","LSTRING","LOPERATOR","LKEYWORD","LCOMMENT","LMINUS","LFAKE",NULL};
|
||||
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","LSNOT",NULL};
|
||||
static const char*operator_chars="-+*/=;(),.{}<>\\!";
|
||||
const char*lexsubtype_names[]={"LENDSTATEMENT","LASSIGN","LLPAREN","LRPAREN","LLCBRACE","LRCBRACE","LSMINUS","LADD","LSMUL","LSDIV","LSNOT","LSCOLON",NULL};
|
||||
static const char*operator_chars="-+*/=;(),.{}<>\\!:";
|
||||
static const char*keywords[]={"do","false","fn","for","if","let","ret","true","while","call","asm","ext",};
|
||||
/* static char*operators[]={";","=","+=","-=","*=","/=","+","-","/","*","(",")","{","}"}; */
|
||||
|
||||
|
@ -171,6 +171,7 @@ void lex_string(Lexer*lex,char*input_string)
|
|||
case '*':opmatch(LSMUL,false);break;
|
||||
case '/':opmatch(LSDIV,false);break;
|
||||
case '!':opmatch(LSNOT,false);break;
|
||||
case ':':opmatch(LSCOLON,false);break;
|
||||
case '=':
|
||||
{
|
||||
opmatch(LASSIGN,false);
|
||||
|
|
2
lex.h
2
lex.h
|
@ -13,7 +13,7 @@
|
|||
#define vec_pushl(v,l) do{Tok x=l;vec_push(v,&x);}while(0)
|
||||
|
||||
enum LEXTYPE {LNONE=0, LIDENTIFIER, LINTEGER, LFLOAT, LSTRING, LOPERATOR, LKEYWORD, LCOMMENT, LMINUS, LFAKE, };
|
||||
enum LEXSUBTYPE {LENDSTATEMENT=55, LASSIGN, LLPAREN, LRPAREN, LLCBRACE, LRCBRACE, LSMINUS, LADD, LSMUL, LSDIV, LSNOT };
|
||||
enum LEXSUBTYPE {LENDSTATEMENT=55, LASSIGN, LLPAREN, LRPAREN, LLCBRACE, LRCBRACE, LSMINUS, LADD, LSMUL, LSDIV, LSNOT, LSCOLON, };
|
||||
extern const char*lextype_names[];
|
||||
extern const char*lexsubtype_names[];
|
||||
extern const char*lextype_colors[];
|
||||
|
|
4
pnode.c
4
pnode.c
|
@ -212,8 +212,8 @@ void parser_parse(Parser*pnode,Vec*tokens)
|
|||
else if(strcmp("while",cur_tok->str.buffer)==0){globalcode();++i;descend(PWHILE);}
|
||||
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);}
|
||||
else if(strcmp("asm",cur_tok->str.buffer)==0){++i;descend(PASM);}
|
||||
else if(strcmp("ext",cur_tok->str.buffer)==0){++i;descend(PEXTERN);}
|
||||
break;
|
||||
|
||||
case LOPERATOR:
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
ext puts();
|
||||
asm"msg:\n.asciz \"hi\"";
|
||||
|
||||
fn main()
|
||||
{
|
||||
ext puts();
|
||||
asm"pushl $msg";
|
||||
puts();
|
||||
ret 0;
|
||||
asm"msg:\n.asciz \"hi\"";
|
||||
}
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
#:31
|
||||
# Coerce floating point values into integers
|
||||
|
||||
ext printf();
|
||||
asm"fmt:\n.asciz \"%d\\n\"";
|
||||
|
||||
fn pi(m)
|
||||
{
|
||||
let x=355.0;
|
||||
|
@ -10,8 +14,6 @@ fn pi(m)
|
|||
|
||||
fn main()
|
||||
{
|
||||
ext printf();
|
||||
|
||||
# printf("%d\n",pi(100000));
|
||||
asm"movl $100000,%edi";
|
||||
pi();
|
||||
|
@ -23,6 +25,4 @@ fn main()
|
|||
# ret pi(10);
|
||||
asm"mov $10,%edi";
|
||||
ret pi();
|
||||
|
||||
asm"fmt:\n.asciz \"%d\\n\"";
|
||||
}
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
ext puts();
|
||||
asm"msg:\n.asciz \"hi\"";
|
||||
|
||||
fn main()
|
||||
{
|
||||
ext puts();
|
||||
asm"movq $msg,%rdi";
|
||||
puts();
|
||||
ret 0;
|
||||
asm"msg:\n.asciz \"hi\"";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user