Mon 16 Mar 11:09:06 CET 2026
This commit is contained in:
parent
9fec172b3a
commit
9daf282626
87
src/test.c
Normal file
87
src/test.c
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
#include "config.h"
|
||||
#include "types.h"
|
||||
#include "lexer.h"
|
||||
#include "tokens.h"
|
||||
#include "mem.h"
|
||||
#include "reg.h"
|
||||
#include "stack.h"
|
||||
#include "ops.h"
|
||||
#include "code.h"
|
||||
#include "debug.h"
|
||||
#include "vm.h"
|
||||
#include "var.h"
|
||||
#include "printf.h"
|
||||
|
||||
// char input[]="a=123 + 567 * 7:a=a+1";
|
||||
char input[]="a=1: if a>0 then a=-a\n else a=a+1\nb=1";
|
||||
//char input[]="a=1: if a>0 { a=-a } else { a=a+1 } \nb=1";
|
||||
|
||||
lexer_t L;
|
||||
mem_t M;
|
||||
reg_t R;
|
||||
stack_t DS,FS;
|
||||
|
||||
int main() {
|
||||
mem_t *mp=&M;
|
||||
|
||||
M.size=1000;
|
||||
M.data=(unsigned char*)malloc(1000);
|
||||
M.top=M.size-1; // empty!
|
||||
M.bottom=0;
|
||||
|
||||
|
||||
//address_t a1=allocate(&M,&R,"a",MVAR,1);
|
||||
//print_format("$a1=%d\n",a1);
|
||||
//address_t b1=allocate(&M,&R,"b",MVAR,1);
|
||||
//print_format("$b1=%d\n",b1);
|
||||
|
||||
DS.size=FS.size=32;
|
||||
DS.data=(number_t*)malloc(32);
|
||||
FS.data=(number_t*)malloc(32);
|
||||
DS.sp=FS.sp=0;
|
||||
|
||||
R.pc=R.error=0;
|
||||
R.debug=1;
|
||||
|
||||
|
||||
LexerSetup(&L,input);
|
||||
do {
|
||||
NextToken(&L);
|
||||
#ifdef DEBUG
|
||||
PrintLexerToken(&L);
|
||||
#endif
|
||||
} while (R.error==0 && L.token!=EOL);
|
||||
if (R.error) {
|
||||
printf("Lexer error %d\n",R.error);
|
||||
return -1;
|
||||
}
|
||||
|
||||
LexerSetup(&L,input);
|
||||
do {
|
||||
CompileInstr(&L,&M,&R);
|
||||
} while (R.error==0 && *L.input!=EOL);
|
||||
if (R.error) {
|
||||
printf("Compiler error %d in line %d\n",R.error,L.line);
|
||||
return -1;
|
||||
}
|
||||
CODESTORE0(mp,M.bottom,END); M.bottom++;
|
||||
|
||||
#ifdef DEBUG
|
||||
PrintCode(&M);
|
||||
#endif
|
||||
// return 0;
|
||||
int status;
|
||||
do {
|
||||
status=run(&DS,&FS,&M,&R);
|
||||
} while (R.error==0 && status==1);
|
||||
if (R.error) {
|
||||
printf("Run-time error %d at pc=%d\n",R.error,R.pc);
|
||||
return -1;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
PrintStack("DS",&DS);
|
||||
PrintStack("FS",&FS);
|
||||
|
||||
PrintHeap(&M);
|
||||
#endif
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user