diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2012-07-31 15:16:04 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2012-07-31 15:16:04 +0000 |
| commit | 83b321d862472f31c0c9f7feca8360ad5bfe8a75 (patch) | |
| tree | 0f0ef20ad78e25b320013c7bb160211a8612d4e9 /src/runtime/c/teyjus/tables/pervasives.h | |
| parent | 314662dd09d5d1480007faa79258b0e93cc2aa59 (diff) | |
An initial import of the teyjus source code in the C runtime for GF. The two runtime are still not connected but the source code compiles.
Diffstat (limited to 'src/runtime/c/teyjus/tables/pervasives.h')
| -rw-r--r-- | src/runtime/c/teyjus/tables/pervasives.h | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/src/runtime/c/teyjus/tables/pervasives.h b/src/runtime/c/teyjus/tables/pervasives.h new file mode 100644 index 000000000..48a96964c --- /dev/null +++ b/src/runtime/c/teyjus/tables/pervasives.h @@ -0,0 +1,326 @@ +/****************************************************************************/ +/* File pervasives.h. */ +/****************************************************************************/ + +#ifndef PERVASIVES_H +#define PERVASIVES_H + +#include "../simulator/mctypes.h" //to be changed +#include "../simulator/dataformats.h" //to be changed + + +/****************************************************************************/ +/* PERVASIVE KIND */ +/****************************************************************************/ +//indices for predefined sorts and type constructors +typedef enum PERV_KindIndexType +{ + // int + PERV_INT_INDEX = 0, + // real + PERV_REAL_INDEX = 1, + // bool + PERV_BOOL_INDEX = 2, + // string + PERV_STRING_INDEX = 3, + // list type constructor + PERV_LIST_INDEX = 4, + // in_stream + PERV_INSTREAM_INDEX = 5, + // out_stream + PERV_OUTSTREAM_INDEX = 6 +} PERV_KindIndexType; + +//total number of pervasive kinds +#define PERV_KIND_NUM 7 + +//pervasive kind data type +typedef struct +{ + char *name; + TwoBytes arity; +} PERV_KindData; + +//pervasive kind data table (array) +extern PERV_KindData PERV_kindDataTab[PERV_KIND_NUM]; + +//pervasive kind data access function +PERV_KindData PERV_getKindData(int index); + +//pervasive kind table copy function (used in module space initialization) +//this functiion relies on the assumption that the pervasive kind data +//has the same structure as that of the run-time kind symbol table entries. +void PERV_copyKindDataTab(PERV_KindData* dst); + + +/***************************************************************************/ +/* TYPE SKELETIONS FOR PERVASIVE CONSTANTS */ +/****************************************************************************/ + +//total number of type skeletons needed for pervasive constants +#define PERV_TY_SKEL_NUM 42 + +//pervasive type skel data type +typedef DF_TypePtr PERV_TySkelData; + +//pervasive type skel table (array) +extern PERV_TySkelData PERV_tySkelTab[PERV_TY_SKEL_NUM]; + +//pervasive type skeletons and type skeleton table initialization +//Note that type skeltons have to be dynamically allocated, and so does the +//info recorded in each entry of the pervasive type skeleton table +void PERV_tySkelTabInit(); + +//pervasive tyskel table copy function +void PERV_copyTySkelTab(PERV_TySkelData* dst); + + +/***************************************************************************/ +/* PERVASIVE CONSTANTS */ +/***************************************************************************/ + +//indices for predefined constants +typedef enum PERV_ConstIndexType +{ + // logical and + PERV_AND_INDEX = 0, + // logical or + PERV_OR_INDEX = 1, + // existential quantifier + PERV_SOME_INDEX = 2, + // universal quantifier + PERV_ALL_INDEX = 3, + // true proposition + PERV_TRUE_INDEX = 4, + // cut predicate + PERV_CUT_INDEX = 5, + // fail predicate + PERV_FAIL_INDEX = 6, + // empty + // another logical and + PERV_AMPAND_INDEX = 8, + // halt the system + PERV_HALT_INDEX = 9, + // return to top level + PERV_STOP_INDEX = 10, + // Prolog if; needed? + PERV_COLONDASH_INDEX = 11, + // implication; needed? + PERV_IMPL_INDEX = 12, + // empty + // empty + // solve; used by code generator + PERV_SOLVE_INDEX = 15, + // is + PERV_IS_INDEX = 16, + // not + PERV_NOT_INDEX = 17, + // equality (unify) predicate + PERV_EQ_INDEX = 18, + // less than on integers + PERV_INTLSS_INDEX = 19, + // greater than on integers + PERV_INTGRT_INDEX = 20, + // less than or eq on integers + PERV_INTLEQ_INDEX = 21, + // greater than or eq on integers + PERV_INTGEQ_INDEX = 22, + // less than in reals + PERV_REALLSS_INDEX = 23, + // greater than on reals + PERV_REALGRT_INDEX = 24, + // less than or eq on reals + PERV_REALLEQ_INDEX = 25, + // greater than or eq on reals + PERV_REALGEQ_INDEX = 26, + // less than on strings + PERV_STRLSS_INDEX = 27, + // greater than on strings + PERV_STRGRT_INDEX = 28, + // less than or eq on strings + PERV_STRLEQ_INDEX = 29, + // greater than or eq on strings + PERV_STRGEQ_INDEX = 30, + // open_in + PERV_OPENIN_INDEX = 31, + // open_out + PERV_OPENOUT_INDEX = 32, + // open_append + PERV_OPENAPP_INDEX = 33, + // close_in + PERV_CLOSEIN_INDEX = 34, + // close_out + PERV_CLOSEOUT_INDEX = 35, + // open_string + PERV_OPENSTR_INDEX = 36, + // input + PERV_INPUT_INDEX = 37, + // output + PERV_OUTPUT_INDEX = 38, + // input_line + PERV_INPUTLINE_INDEX = 39, + // lookahead + PERV_LOOKAHEAD_INDEX = 40, + // eof + PERV_EOF_INDEX = 41, + // flush + PERV_FLUSH_INDEX = 42, + // print + PERV_PRINT_INDEX = 43, + // read + PERV_READ_INDEX = 44, + // printterm + PERV_PRINTTERM_INDEX = 45, + // term_to_string + PERV_TERMTOSTR_INDEX = 46, + // string_to_term + PERV_STRTOTERM_INDEX = 47, + // readterm + PERV_READTERM_INDEX = 48, + // getenv predicate; needed? + PERV_GETENV_INDEX = 49, + // open_socket predicate + PERV_OPENSOCKET_INDEX = 50, + // time predicate + PERV_TIME_INDEX = 51, + // system predicate + PERV_SYSTEM_INDEX = 52, + // empty + // empty + // empty + // unary minus on integers + PERV_INTUMINUS_INDEX = 56, + // addition on integers + PERV_INTPLUS_INDEX = 57, + // subtraction on integers + PERV_INTMINUS_INDEX = 58, + // mutiplication on integers + PERV_INTMULT_INDEX = 59, + // integer division + PERV_INTDIV_INDEX = 60, + // modulus + PERV_MOD_INDEX = 61, + // coercion to real + PERV_ITOR_INDEX = 62, + // integer abs + PERV_IABS_INDEX = 63, + // unary minus on real + PERV_REALUMINUS_INDEX = 64, + // addition on reals + PERV_REALPLUS_INDEX = 65, + // subtraction on reals + PERV_REALMINUS_INDEX = 66, + // multiplication on reals + PERV_REALMULT_INDEX = 67, + // division + PERV_REALDIV_INDEX = 68, + // square root + PERV_SQRT_INDEX = 69, + // sine + PERV_SIN_INDEX = 70, + // cosine + PERV_COS_INDEX = 71, + // arc tan + PERV_ARCTAN_INDEX = 72, + // natural log + PERV_LOG_INDEX = 73, + // floor function + PERV_FLOOR_INDEX = 74, + // ceiling function + PERV_CEIL_INDEX = 75, + // truncation + PERV_TRUNC_INDEX = 76, + // real abs + PERV_RABS_INDEX = 77, + // string concatination + PERV_SCAT_INDEX = 78, + // string length + PERV_SLEN_INDEX = 79, + // chr function + PERV_ITOCHR_INDEX = 80, + // ord function + PERV_STOI_INDEX = 81, + // substring + PERV_SUBSTR_INDEX = 82, + // int to string + PERV_ITOSTR_INDEX = 83, + // real to string + PERV_RTOS_INDEX = 84, + // for unnamed universal constants (Note: tesize should be 0) + PERV_UNIV_INDEX = 85, + // std_in + PERV_STDIN_INDEX = 86, + // std_out + PERV_STDOUT_INDEX = 87, + // std_err + PERV_STDERR_INDEX = 88, + // nil + PERV_NIL_INDEX = 89, + // integer constant + PERV_INTC_INDEX = 90, + // real constant + PERV_REALC_INDEX = 91, + // string constant + PERV_STRC_INDEX = 92, + // cons + PERV_CONS_INDEX = 93 +} PERV_ConstIndexType; + +//total number pervasive constants +#define PERV_CONST_NUM 94 + +//pervasive const data type +typedef struct +{ + char *name; + TwoBytes typeEnvSize; + TwoBytes tskTabIndex; //index to the type skeleton table + TwoBytes neededness; //neededness (predicate constant) + TwoBytes univCount; + int precedence; + int fixity; +} PERV_ConstData; + +//pervasive const data table (array) +extern PERV_ConstData PERV_constDataTab[PERV_CONST_NUM]; + +//pervasive const data access function +PERV_ConstData PERV_getConstData(int index); + +//pervasive const table copy function (used in module space initialization) +//this functiion relies on the assumption that the pervasive kind data +//has the same structure as that of the run-time kind symbol table entries. +void PERV_copyConstDataTab(PERV_ConstData* dst); + +#define PERV_LSSTART PERV_AND_INDEX //begin of interpretable symbols +#define PERV_LSEND PERV_STOP_INDEX //end of interpretable symbols + +#define PERV_PREDSTART PERV_SOLVE_INDEX //begin of predicate symbols +#define PERV_PREDEND PERV_SYSTEM_INDEX //end of predicate symbols + +typedef enum PERV_LogicSymbTypes +{ + PERV_AND = 0, + PERV_OR = 1, + PERV_SOME = 2, + PERV_ALL = 3, + PERV_L_TRUE = 4, + PERV_CUT = 5, + PERV_FAIL = 6, + PERV_EQ = 7, + PERV_AMPAND = 8, + PERV_HALT = 9, + PERV_STOP = 10, +} PERV_LogicSymbTypes; + +//functions used by the simulator for interpreted goals +Boolean PERV_isLogicSymb(int index); +Boolean PERV_isPredSymb(int index); + +PERV_LogicSymbTypes PERV_logicSymb(int index); + +int PERV_predBuiltin(int index); + + +#endif //PERVASIVES_H + |
