int main(){ /* Load library */ LoadCoreLibrary(); /* Open our file and lexify it */ FILE* file = fopen("test/test.vy", "r"); TokenList* tokens = LexFile(file); TokenList* last = tokens; while(last){ VyObj parsed = Parse(last, &last); printf("|"); PrintObj(stdout, parsed); printf("|\nevaluates to\n"); VyObj val = Eval(parsed); PrintObj(stdout, val); printf("\n\n"); } FreeTokens(tokens); /* Finalize */ FinishRuntime(); /* Exit */ return 0; }
/* A utility function for parsing a whole file */ VyParseTree* ParseFile(char* filename){ if(filename == NULL){ fprintf(stderr, "Null pointer as filename."); return NULL; } /* Perform lexing */ LexFile(filename); if(GetNumTokens() < 1){ printf("Empty file: %s\n", filename); return NULL; } /* Parse the tokens */ VyParseTree* list = MakeListTree(); while(MoreTokensExist()) { VyParseTree* tree = Parse(); AddToList(list, tree); } CleanLexer(); return list; }
/* ================ DeclParser::LoadFile Loads either the binary or the text version, depending on which is newer. ================ */ bool DeclParser::LoadFile( const char *filename ) { if ( commonFS == OG_NULL ) return false; String binFilename(filename); binFilename += ".bin"; bool binExists = commonFS->FileExists( binFilename.c_str() ); bool txtExists = commonFS->FileExists( filename ); if ( binExists && txtExists ) { if ( commonFS->FileTime( binFilename.c_str() ) > commonFS->FileTime( filename ) ) return BinaryFile( binFilename.c_str() ); return LexFile(filename); } else if ( binExists ) return BinaryFile( binFilename.c_str() ); else if ( txtExists ) return LexFile( filename ); return false; }