#ifndef __NASAL_H__ #define __NASAL_H__ #pragma GCC optimize(2) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* check if a string can be converted to a number if this string cannot be converted to a number,it will return nan */ inline double hex_to_double(std::string& str) { double ret=0; for(int i=2;str[i];++i) { ret*=16; if('0'<=str[i] && str[i]<='9') ret+=(str[i]-'0'); else if('a'<=str[i] && str[i]<='f') ret+=(str[i]-'a'+10); else if('A'<=str[i] && str[i]<='F') ret+=(str[i]-'A'+10); else return std::nan(""); } return ret; } inline double oct_to_double(std::string& str) { double ret=0; for(int i=2;str[i];++i) { ret*=8; if('0'<=str[i] && str[i]<='8') ret+=(str[i]-'0'); else return std::nan(""); } return ret; } inline double dec_to_double(std::string& str,int len) { double ret=0; int i=0; while('0'<=str[i] && str[i]<='9' && i1 && str[0]=='0' && str[1]=='x') ret_num=hex_to_double(str); else if(len>1 && str[0]=='0' && str[1]=='o') ret_num=oct_to_double(str); else ret_num=dec_to_double(str,len); return is_negative?-ret_num:ret_num; } /* trans_number_to_string: convert number to string */ std::string trans_number_to_string(double number) { std::string res; std::stringstream ss; ss<>res; return res; } #include "nasal_lexer.h" #include "nasal_ast.h" #include "nasal_parse.h" #include "nasal_import.h" #include "nasal_gc.h" #include "nasal_builtin.h" #include "nasal_codegen.h" #include "nasal_vm.h" #endif