65 lines
1.5 KiB
C
65 lines
1.5 KiB
C
/* Copyright (c) 2019 ACK Project.
|
|
* See the copyright notice in the ACK home directory,
|
|
* in the file "Copyright".
|
|
*
|
|
*/
|
|
#ifndef __GENCODE_H_INCLUDED__
|
|
#define __GENCODE_H_INCLUDED__
|
|
|
|
#include "symbols.h"
|
|
|
|
|
|
/*--------------------------- Utilities -----------------------*/
|
|
|
|
/** Return a global value identifier used for code generation */
|
|
extern int genlabel(void);
|
|
|
|
|
|
/*-------------------------- Code generation ---------------------*/
|
|
|
|
/** Emit a label definition and return the label identifier generated. */
|
|
extern int genemlabel(void);
|
|
|
|
|
|
void newemblock(int nr);
|
|
void newblock(int nr);
|
|
void datastmt(void);
|
|
void datatable(void);
|
|
/* ERROR and exception handling */
|
|
void exceptstmt(int lab);
|
|
void errorstmt(int exprtype);
|
|
/* BASIC IO */
|
|
void openstmt(int recsize);
|
|
void printstmt(int exprtype);
|
|
void zone(int i);
|
|
void writestmt(int exprtype, int comma);
|
|
void restore(int lab);
|
|
void prompt(int qst);
|
|
void linestmt(int type);
|
|
void readelm(int type);
|
|
/* Swap exchanges the variable values */
|
|
void swapstmt(int ltype,int rtype);
|
|
void setchannel(int val);
|
|
int ifstmt(int type);
|
|
int thenpart(int elselab);
|
|
void elsepart(int lab);
|
|
void forinit(Symbol *s);
|
|
void forexpr(int type);
|
|
void forlimit(int type);
|
|
void forstep(int type);
|
|
void nextstmt(Symbol *s);
|
|
void pokestmt(int type1,int type2);
|
|
void whilestart(void);
|
|
void whiletst(int exprtype);
|
|
void wend(void);
|
|
/* generate code for the final version */
|
|
void prologcode(void);
|
|
void prolog2(void);
|
|
void gendata(void);
|
|
void epilogcode(void);
|
|
void setchannel(int val);
|
|
void gendata(void);
|
|
|
|
|
|
#endif /* __GENCODE_H_INCLUDED__ */
|