#ifndef _LANGUAGE_H #define _LANGUAGE_H typedef unsigned long udata; #define VT_UNDEF 0 #define VT_INT 1 #define VT_STR 2 typedef struct { int typ; udata d; } var_t; typedef unsigned short sym_t; typedef struct { sym_t sym; udata num; } lex_t; typedef struct { sym_t stav; /* line */ sym_t terminal[8]; /* column */ sym_t stack[16]; /* table contents */ } tab_t; #define TYP 0xf000 #define T 0x0000 #define N 0x1000 #define O 0x2000 #define E 0x4000 #define TEND 0x8332 #define END 0x8333 struct nav_rel_s { struct nav_rel_s *next; int pos; }; struct nav_tab_s { struct nav_tab_s *next; struct nav_rel_s *rel; }; /* Errors */ #define LexErr 10 /* Output terminals */ #define oTP (O|0) /* out value */ #define oSP0 (O|1) /* out value */ #define oSP1 (O|2) /* out value */ #define oTO (O|3) /* out value */ #define oTT (O|4) /* out type of lexical unit */ #define oS0 (O|5) /* out 0; */ #define oS1 (O|6) /* out 1; */ #define oPREFIX (O|7) /* out prefix CTT_PREFIX */ #define oCNOT (O|8) /* out command: negacia podmienky */ #define oCTRUE (O|9) /* out command: jump if true (adr) */ #define oCFALSE (O|10) /* out command: jump if false (adr) */ #define oCJUMP (O|11) /* out command: jump always (adr) */ #define oCRET (O|12) /* out command: end of execution (return value) */ /* aktivne */ #define oNA (O|13) /* label allocation - label stack */ #define oNS (O|14) /* label address set - pop */ #define oNS1 (O|15) /* label address set (the one before the last) - "pop" */ #define oNR (O|16) /* here write label address */ #define oOP (O|17) /* executes operation on output stack (a b op) -> (c) if a op b = c */ #define oDEFUN (O|18) /* declare function */ #define oFSADD (O|19) /* add rule to fs */ #define oON (O|20) /* add rule to on */ #define oFORCE (O|21) /* add force */ extern int lex_line, lex_char; sym_t getlex(lex_t * lex, long d, sym_t wanted); char *lex2str(lex_t * lex); sym_t sa_automat(tab_t * tab, sym_t start, sym_t(*lex) (lex_t *, long, sym_t), void (*out) (lex_t *, sym_t), long d); struct med_s; udata exec_program(udata * prog, struct med_s *med); void lang_warning(char *format, ...); void lang_error(char *format, ...); extern int lang_errors; void add_fsentry(udata act, udata recursive, char *subor, udata * prog, int proglen); int read_config(char *subor); #define MED_NONE -100 #endif