Basic compiler is now ISO C90 compliant.
This commit is contained in:
parent
ca3e272233
commit
f371f452b5
|
@ -90,6 +90,10 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "bem.h"
|
||||
#include "util.h"
|
||||
#include "gencode.h"
|
||||
#include "eval.h"
|
||||
#include "func.h"
|
||||
#include "llmess.h"
|
||||
|
||||
typedef union {
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#ifndef NORSCID
|
||||
|
||||
#ifndef NORCSID
|
||||
static char rcs_lex[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -151,7 +152,7 @@ Key keywords [] ={
|
|||
int kex[27];
|
||||
|
||||
/* Initialize the keyword table */
|
||||
fillkex()
|
||||
void fillkex(void)
|
||||
{
|
||||
Key *k;
|
||||
int i;
|
||||
|
@ -235,7 +236,7 @@ File *stream;
|
|||
}
|
||||
}
|
||||
|
||||
getinputline()
|
||||
int getinputline(void)
|
||||
{
|
||||
/* get next input line */
|
||||
|
||||
|
@ -255,7 +256,7 @@ getinputline()
|
|||
|
||||
|
||||
|
||||
typechar()
|
||||
int typechar(void)
|
||||
{
|
||||
switch(*cptr)
|
||||
{
|
||||
|
@ -277,7 +278,7 @@ typechar()
|
|||
char name[SIGNIFICANT+1];
|
||||
|
||||
|
||||
lookup()
|
||||
int lookup(void)
|
||||
{
|
||||
Key *k;
|
||||
Symbol *Sym;
|
||||
|
@ -341,7 +342,7 @@ lookup()
|
|||
|
||||
|
||||
/* Parsing unsigned numbers */
|
||||
readconstant()
|
||||
int readconstant(void)
|
||||
{
|
||||
/* read HEX and OCTAL numbers */
|
||||
char *c;
|
||||
|
@ -372,9 +373,7 @@ readconstant()
|
|||
#ifdef ____
|
||||
/* Computes base to the power exponent. This was not done in the old
|
||||
compiler */
|
||||
double powr(base,exp)
|
||||
double base;
|
||||
int exp;
|
||||
double powr(double base,int exp)
|
||||
{
|
||||
int i;
|
||||
double result;
|
||||
|
@ -398,7 +397,7 @@ int exp;
|
|||
#endif
|
||||
|
||||
|
||||
number()
|
||||
int number(void)
|
||||
{
|
||||
long i1;
|
||||
int overflow = 0;
|
||||
|
@ -468,7 +467,7 @@ number()
|
|||
|
||||
|
||||
|
||||
scanstring()
|
||||
int scanstring(void)
|
||||
{
|
||||
int i,length=0;
|
||||
char firstchar = *cptr;
|
||||
|
@ -532,7 +531,7 @@ scanstring()
|
|||
|
||||
|
||||
|
||||
yylex()
|
||||
int yylex(void)
|
||||
{
|
||||
char *c;
|
||||
|
||||
|
|
|
@ -4,8 +4,12 @@
|
|||
*/
|
||||
|
||||
#include "bem.h"
|
||||
#include "parsepar.h"
|
||||
#include "system.h"
|
||||
#include "graph.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
static char rcs_bem[] = RCS_BEM ;
|
||||
static char rcs_symb[] = RCS_SYMB ;
|
||||
|
@ -33,9 +37,11 @@ char *inpfile, *outfile;
|
|||
int BEMINTSIZE = EMINTSIZE;
|
||||
int BEMPTRSIZE = EMPTRSIZE;
|
||||
int BEMFLTSIZE = EMFLTSIZE;
|
||||
main(argc,argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
|
||||
extern void initialize(void);
|
||||
extern void compileprogram(void);
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
extern int errorcnt;
|
||||
|
||||
|
|
|
@ -4,13 +4,14 @@
|
|||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
#include <system.h>
|
||||
#include <print.h>
|
||||
#include <em.h>
|
||||
#include <em_mes.h>
|
||||
#include "system.h"
|
||||
#include "print.h"
|
||||
#include "em.h"
|
||||
#include "em_mes.h"
|
||||
|
||||
/* Author: M.L. Kersten
|
||||
** Here all the global objects are defined.
|
||||
|
|
|
@ -3,19 +3,25 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
/*#include "bem.h"*/
|
||||
#include <stdio.h>
|
||||
#include "system.h"
|
||||
#include "gencode.h"
|
||||
#include "bem.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
extern int getinputline(void);
|
||||
extern void LLparse(void);
|
||||
|
||||
/* compile the next program in the list */
|
||||
/* Here we should open the input file. (for the future) */
|
||||
|
||||
File *yyin;
|
||||
|
||||
compileprogram()
|
||||
void compileprogram(void)
|
||||
{
|
||||
extern int basicline;
|
||||
|
||||
|
@ -24,7 +30,9 @@ compileprogram()
|
|||
epilogcode in the new version of the compiler */
|
||||
|
||||
while( basicline = 0, getinputline())
|
||||
(void) LLparse();
|
||||
{
|
||||
LLparse();
|
||||
}
|
||||
epilogcode();
|
||||
sys_close(yyin);
|
||||
}
|
||||
|
|
|
@ -4,8 +4,10 @@
|
|||
*/
|
||||
|
||||
#include "bem.h"
|
||||
#include "util.h"
|
||||
#include "gencode.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -14,8 +16,7 @@ static char rcs_id[] = "$Id$" ;
|
|||
generate code for assignment statements
|
||||
*/
|
||||
|
||||
exprtype(ltype,rtype)
|
||||
int ltype,rtype;
|
||||
static int exprtype(int ltype,int rtype)
|
||||
{
|
||||
/* determine the result type of an expression */
|
||||
if ( ltype==STRINGTYPE || rtype==STRINGTYPE)
|
||||
|
@ -31,9 +32,7 @@ int ltype,rtype;
|
|||
|
||||
|
||||
|
||||
void
|
||||
conversion(oldtype,newtype)
|
||||
int oldtype,newtype;
|
||||
void conversion(int oldtype,int newtype)
|
||||
{
|
||||
/* the value on top of the stack should be converted */
|
||||
if ( oldtype==newtype) return;
|
||||
|
@ -62,7 +61,10 @@ int oldtype,newtype;
|
|||
C_lfr((arith)BEMINTSIZE);
|
||||
break;
|
||||
} else if ( newtype==FLOATTYPE || newtype==DOUBLETYPE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (debug)
|
||||
print("type n=%d o=%d\n",newtype,oldtype);
|
||||
|
@ -72,9 +74,7 @@ int oldtype,newtype;
|
|||
|
||||
|
||||
|
||||
void
|
||||
extraconvert(oldtype,newtype,topstack)
|
||||
int oldtype,newtype,topstack;
|
||||
void extraconvert(int oldtype,int newtype,int topstack)
|
||||
{
|
||||
/* the value below the top of the stack should be converted */
|
||||
if ( oldtype==newtype ) return;
|
||||
|
@ -116,8 +116,7 @@ int oldtype,newtype,topstack;
|
|||
|
||||
|
||||
|
||||
boolop(ltype,rtype,operator)
|
||||
int ltype,rtype,operator;
|
||||
int boolop(int ltype,int rtype,int operator)
|
||||
{
|
||||
if ( operator != NOTSYM)
|
||||
{
|
||||
|
@ -158,8 +157,7 @@ int ltype,rtype,operator;
|
|||
|
||||
|
||||
|
||||
genbool(operator)
|
||||
int operator;
|
||||
void genbool(int operator)
|
||||
{
|
||||
int l1,l2;
|
||||
|
||||
|
@ -186,8 +184,7 @@ int operator;
|
|||
|
||||
|
||||
|
||||
relop( ltype,rtype,operator)
|
||||
int ltype,rtype,operator;
|
||||
int relop(int ltype,int rtype,int operator)
|
||||
{
|
||||
int result;
|
||||
|
||||
|
@ -213,8 +210,7 @@ int ltype,rtype,operator;
|
|||
|
||||
|
||||
|
||||
plusmin(ltype,rtype,operator)
|
||||
int ltype,rtype,operator;
|
||||
int plusmin(int ltype,int rtype,int operator)
|
||||
{
|
||||
int result;
|
||||
|
||||
|
@ -246,8 +242,7 @@ int ltype,rtype,operator;
|
|||
|
||||
|
||||
|
||||
muldiv(ltype,rtype,operator)
|
||||
int ltype,rtype,operator;
|
||||
int muldiv(int ltype,int rtype,int operator)
|
||||
{
|
||||
int result;
|
||||
|
||||
|
@ -286,8 +281,7 @@ int ltype,rtype,operator;
|
|||
|
||||
|
||||
|
||||
negate(type)
|
||||
int type;
|
||||
int negate(int type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
|
@ -307,8 +301,7 @@ int type;
|
|||
|
||||
|
||||
#ifdef ___
|
||||
power(ltype,rtype)
|
||||
int ltype,rtype;
|
||||
int power(int ltype,int rtype)
|
||||
{
|
||||
int resulttype = exprtype(ltype, rtype);
|
||||
|
||||
|
@ -330,8 +323,7 @@ int ltype,rtype;
|
|||
return(resulttype);
|
||||
}
|
||||
#else
|
||||
power(ltype,rtype)
|
||||
int ltype,rtype;
|
||||
int power(int ltype,int rtype)
|
||||
{
|
||||
extraconvert(ltype,DOUBLETYPE,rtype);
|
||||
conversion(rtype,DOUBLETYPE);
|
||||
|
@ -343,8 +335,7 @@ int ltype,rtype;
|
|||
#endif
|
||||
|
||||
|
||||
int typesize(ltype)
|
||||
int ltype;
|
||||
int typesize(int ltype)
|
||||
{
|
||||
switch( ltype)
|
||||
{
|
||||
|
@ -364,8 +355,7 @@ int ltype;
|
|||
|
||||
|
||||
|
||||
int typestring(type)
|
||||
int type;
|
||||
int typestring(int type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
|
@ -384,8 +374,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
loadvar(type)
|
||||
int type;
|
||||
void loadvar(int type)
|
||||
{
|
||||
/* load a simple variable its address is on the stack*/
|
||||
C_loi((arith)typestring(type));
|
||||
|
@ -393,8 +382,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
loadint(value)
|
||||
int value;
|
||||
int loadint(int value)
|
||||
{
|
||||
C_loc((arith)value);
|
||||
return(INTTYPE);
|
||||
|
@ -402,8 +390,7 @@ int value;
|
|||
|
||||
|
||||
|
||||
loaddbl(value)
|
||||
char *value;
|
||||
int loaddbl(char* value)
|
||||
{
|
||||
int index;
|
||||
|
||||
|
@ -417,16 +404,14 @@ char *value;
|
|||
|
||||
|
||||
|
||||
loadstr(value)
|
||||
int value;
|
||||
void loadstr(int value)
|
||||
{
|
||||
C_lae_dlb((label)value,(arith)0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
loadaddr(s)
|
||||
Symbol *s;
|
||||
int loadaddr(Symbol *s)
|
||||
{
|
||||
extern Symbol *fcn;
|
||||
int i,j;
|
||||
|
@ -450,7 +435,7 @@ Symbol *s;
|
|||
|
||||
|
||||
/* This is a new routine */
|
||||
save_address()
|
||||
void save_address(void)
|
||||
{
|
||||
C_lae_dnam("dummy3",(arith)0);
|
||||
C_sti((arith)BEMPTRSIZE);
|
||||
|
@ -458,8 +443,7 @@ save_address()
|
|||
|
||||
|
||||
|
||||
assign(type,lt)
|
||||
int type,lt;
|
||||
void assign(int type,int lt)
|
||||
{
|
||||
extern int e1,e2;
|
||||
|
||||
|
@ -472,8 +456,7 @@ int type,lt;
|
|||
|
||||
|
||||
|
||||
storevar(lab,type)
|
||||
int lab,type;
|
||||
void storevar(int lab,int type)
|
||||
{
|
||||
/*store value back */
|
||||
C_lae_dlb((label)lab,(arith)0);
|
||||
|
@ -488,8 +471,7 @@ Symbol *arraystk[MAXDIMENSIONS];
|
|||
|
||||
|
||||
|
||||
newarrayload(s)
|
||||
Symbol *s;
|
||||
void newarrayload(Symbol *s)
|
||||
{
|
||||
if ( dimtop<MAXDIMENSIONS) dimtop++;
|
||||
if ( s->dimensions==0)
|
||||
|
@ -504,16 +486,14 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
endarrayload()
|
||||
int endarrayload(void)
|
||||
{
|
||||
return(arraystk[dimtop--]->symtype);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
loadarray(type)
|
||||
int type;
|
||||
void loadarray(int type)
|
||||
{
|
||||
int dim;
|
||||
Symbol *s;
|
||||
|
|
54
lang/basic/src/eval.h
Normal file
54
lang/basic/src/eval.h
Normal file
|
@ -0,0 +1,54 @@
|
|||
/* Copyright (c) 2019 ACK Project.
|
||||
* See the copyright notice in the ACK home directory,
|
||||
* in the file "Copyright".
|
||||
*
|
||||
*/
|
||||
#ifndef __EVAL_H_INCLUDED__
|
||||
#define __EVAL_H_INCLUDED__
|
||||
|
||||
#include "symbols.h"
|
||||
|
||||
|
||||
/*--------------------------- Utilities -----------------------*/
|
||||
|
||||
/** From an internal type definition return the size in bytes of the data.
|
||||
* If not a known data type return an integer size. */
|
||||
extern int typesize(int ltype);
|
||||
/** From an internal type definition return the size in bytes of the data. If not a
|
||||
* known data type return a 0 size. */
|
||||
extern int typestring(int type);
|
||||
|
||||
|
||||
/*-------------------------- Code generation ---------------------*/
|
||||
|
||||
/** Emit code to convert from the old internal type to the new internal type definition.
|
||||
* Generates an error if the type conversion is not allowed. */
|
||||
extern void conversion(int oldtype,int newtype);
|
||||
/** Emit code to store a value of the specified type from the top of stack
|
||||
* into the specified variable pointed to by label.
|
||||
*/
|
||||
extern void storevar(int lab,int type);
|
||||
|
||||
/** Emit code to load a simple variable value on the stack. On input the address of the variable
|
||||
* is on the stack. */
|
||||
extern void loadvar(int type);
|
||||
|
||||
extern void extraconvert(int oldtype,int newtype,int topstack);
|
||||
|
||||
extern void loadstr(int value);
|
||||
extern int endarrayload(void);
|
||||
extern void loadarray(int type);
|
||||
extern void save_address(void);
|
||||
extern void assign(int type,int lt);
|
||||
extern int boolop(int ltype,int rtype,int operator);
|
||||
extern int relop(int ltype,int rtype,int operator);
|
||||
extern int plusmin(int ltype,int rtype,int operator);
|
||||
extern int muldiv(int ltype,int rtype,int operator);
|
||||
extern int negate(int type);
|
||||
extern int power(int ltype,int rtype);
|
||||
extern int loadint(int value);
|
||||
extern int loaddbl(char* value);
|
||||
extern int loadaddr(Symbol *s);
|
||||
extern void newarrayload(Symbol *s);
|
||||
|
||||
#endif /* __EVAL_H_INCLUDED */
|
|
@ -4,8 +4,10 @@
|
|||
*/
|
||||
|
||||
#include "bem.h"
|
||||
#include "util.h"
|
||||
#include "eval.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -19,8 +21,7 @@ int exprlimit;
|
|||
|
||||
|
||||
|
||||
parm(cnt)
|
||||
int cnt;
|
||||
void parm(int cnt)
|
||||
{
|
||||
if( cnt> exprlimit)
|
||||
error("Not enough arguments");
|
||||
|
@ -30,9 +31,7 @@ int cnt;
|
|||
|
||||
|
||||
|
||||
callfcn(fcnnr,cnt,typetable)
|
||||
int fcnnr,cnt;
|
||||
int *typetable;
|
||||
int callfcn(int fcnnr,int cnt,int *typetable)
|
||||
{
|
||||
int pop=DOUBLETYPE;
|
||||
int res=DOUBLETYPE;
|
||||
|
|
13
lang/basic/src/func.h
Normal file
13
lang/basic/src/func.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* Copyright (c) 2019 ACK Project.
|
||||
* See the copyright notice in the ACK home directory,
|
||||
* in the file "Copyright".
|
||||
*
|
||||
*/
|
||||
#ifndef __FUNC_H_INCLUDED__
|
||||
#define __FUNC_H_INCLUDED__
|
||||
|
||||
|
||||
extern int callfcn(int fcnnr,int cnt,int *typetable);
|
||||
|
||||
|
||||
#endif /* __FUNC_H_INCLUDED__ */
|
|
@ -4,9 +4,12 @@
|
|||
*/
|
||||
|
||||
#include "bem.h"
|
||||
#include "system.h"
|
||||
#include "graph.h"
|
||||
#include "eval.h"
|
||||
#include "util.h"
|
||||
#include "gencode.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -18,14 +21,14 @@ label err_goto_label;
|
|||
|
||||
|
||||
|
||||
genlabel()
|
||||
int genlabel(void)
|
||||
{
|
||||
return(emlabel++);
|
||||
}
|
||||
|
||||
|
||||
|
||||
genemlabel()
|
||||
int genemlabel(void)
|
||||
{
|
||||
int l;
|
||||
|
||||
|
@ -39,8 +42,7 @@ genemlabel()
|
|||
|
||||
|
||||
int tronoff=0;
|
||||
newemblock(nr)
|
||||
int nr;
|
||||
void newemblock(int nr)
|
||||
{
|
||||
C_df_ilb((label)currline->emlabel);
|
||||
C_lin((arith)nr);
|
||||
|
@ -57,7 +59,7 @@ int nr;
|
|||
|
||||
/* Handle data statements */
|
||||
List *datalist=0;
|
||||
datastmt()
|
||||
void datastmt(void)
|
||||
{
|
||||
List *l,*l1;
|
||||
|
||||
|
@ -78,7 +80,7 @@ datastmt()
|
|||
|
||||
|
||||
|
||||
datatable()
|
||||
void datatable(void)
|
||||
{
|
||||
List *l;
|
||||
int line=0;
|
||||
|
@ -100,8 +102,7 @@ datatable()
|
|||
|
||||
|
||||
/* ERROR and exception handling */
|
||||
exceptstmt(lab)
|
||||
int lab;
|
||||
void exceptstmt(int lab)
|
||||
{
|
||||
/* exceptions to subroutines are supported only */
|
||||
extern int gosubcnt;
|
||||
|
@ -116,8 +117,7 @@ int lab;
|
|||
|
||||
|
||||
|
||||
errorstmt(exprtype)
|
||||
int exprtype;
|
||||
void errorstmt(int exprtype)
|
||||
{
|
||||
/* convert expression to a valid error number */
|
||||
/* obtain the message and print it */
|
||||
|
@ -128,8 +128,7 @@ int exprtype;
|
|||
|
||||
|
||||
/* BASIC IO */
|
||||
openstmt(recsize)
|
||||
int recsize;
|
||||
void openstmt(int recsize)
|
||||
{
|
||||
C_loc((arith)recsize);
|
||||
C_cal("_opnchn");
|
||||
|
@ -138,8 +137,7 @@ int recsize;
|
|||
|
||||
|
||||
|
||||
printstmt(exprtype)
|
||||
int exprtype;
|
||||
void printstmt(int exprtype)
|
||||
{
|
||||
switch(exprtype)
|
||||
{
|
||||
|
@ -165,16 +163,14 @@ int exprtype;
|
|||
|
||||
|
||||
|
||||
zone(i)
|
||||
int i;
|
||||
void zone(int i)
|
||||
{
|
||||
if ( i) C_cal("_zone");
|
||||
}
|
||||
|
||||
|
||||
|
||||
writestmt(exprtype,comma)
|
||||
int exprtype,comma;
|
||||
void writestmt(int exprtype, int comma)
|
||||
{
|
||||
if ( comma) C_cal("_wrcomma");
|
||||
|
||||
|
@ -198,8 +194,7 @@ int exprtype,comma;
|
|||
|
||||
|
||||
|
||||
restore(lab)
|
||||
int lab;
|
||||
void restore(int lab)
|
||||
{
|
||||
/* save this information too */
|
||||
|
||||
|
@ -213,8 +208,7 @@ int lab;
|
|||
|
||||
|
||||
|
||||
prompt(qst)
|
||||
int qst;
|
||||
void prompt(int qst)
|
||||
{
|
||||
setchannel(-1);
|
||||
C_cal("_prstr");
|
||||
|
@ -224,8 +218,7 @@ int qst;
|
|||
|
||||
|
||||
|
||||
linestmt(type)
|
||||
int type;
|
||||
void linestmt(int type)
|
||||
{
|
||||
if ( type!= STRINGTYPE)
|
||||
error("String variable expected");
|
||||
|
@ -235,8 +228,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
readelm(type)
|
||||
int type;
|
||||
void readelm(int type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
|
@ -259,8 +251,7 @@ int type;
|
|||
|
||||
|
||||
/* Swap exchanges the variable values */
|
||||
swapstmt(ltype,rtype)
|
||||
int ltype, rtype;
|
||||
void swapstmt(int ltype,int rtype)
|
||||
{
|
||||
if ( ltype!= rtype)
|
||||
error("Type mismatch");
|
||||
|
@ -287,9 +278,9 @@ int ltype, rtype;
|
|||
|
||||
|
||||
/* input/output handling */
|
||||
setchannel(val)
|
||||
int val;
|
||||
{ /* obtain file descroption */
|
||||
void setchannel(int val)
|
||||
{
|
||||
/* obtain file descroption */
|
||||
C_loc((arith)val);
|
||||
C_cal("_setchan");
|
||||
C_asp((arith)BEMINTSIZE);
|
||||
|
@ -298,8 +289,7 @@ int val;
|
|||
|
||||
|
||||
/* The if-then-else statements */
|
||||
ifstmt(type)
|
||||
int type;
|
||||
int ifstmt(int type)
|
||||
{
|
||||
/* This BASIC follows the True= -1 rule */
|
||||
int nr;
|
||||
|
@ -322,8 +312,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
thenpart( elselab)
|
||||
int elselab;
|
||||
int thenpart(int elselab)
|
||||
{
|
||||
int nr;
|
||||
|
||||
|
@ -335,7 +324,7 @@ int elselab;
|
|||
|
||||
|
||||
|
||||
elsepart(lab)int lab;
|
||||
void elsepart(int lab)
|
||||
{
|
||||
C_df_ilb((label)lab);
|
||||
}
|
||||
|
@ -359,8 +348,7 @@ int forcnt= -1;
|
|||
|
||||
|
||||
|
||||
forinit(s)
|
||||
Symbol *s;
|
||||
void forinit(Symbol *s)
|
||||
{
|
||||
int type;
|
||||
struct FORSTRUCT *f;
|
||||
|
@ -388,8 +376,7 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
forexpr(type)
|
||||
int type;
|
||||
void forexpr(int type)
|
||||
{
|
||||
/* save start value of loop variable in a save place*/
|
||||
/* to avoid clashing with final value and step expression */
|
||||
|
@ -402,8 +389,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
forlimit(type)
|
||||
int type;
|
||||
void forlimit(int type)
|
||||
{
|
||||
/* save the limit value too*/
|
||||
int result;
|
||||
|
@ -415,8 +401,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
forskipped(f)
|
||||
struct FORSTRUCT *f;
|
||||
void forskipped(struct FORSTRUCT *f)
|
||||
{
|
||||
int type;
|
||||
|
||||
|
@ -452,8 +437,7 @@ struct FORSTRUCT *f;
|
|||
|
||||
|
||||
|
||||
forstep(type)
|
||||
int type;
|
||||
void forstep(int type)
|
||||
{
|
||||
int result;
|
||||
int varaddress;
|
||||
|
@ -522,8 +506,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
nextstmt(s)
|
||||
Symbol *s;
|
||||
void nextstmt(Symbol *s)
|
||||
{
|
||||
if (forcnt>MAXFORDEPTH || forcnt<0 ||
|
||||
(s && s!= fortable[forcnt].loopvar))
|
||||
|
@ -538,8 +521,7 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
pokestmt(type1,type2)
|
||||
int type1,type2;
|
||||
void pokestmt(int type1,int type2)
|
||||
{
|
||||
conversion(type1,INTTYPE);
|
||||
conversion(type2,INTTYPE);
|
||||
|
@ -553,7 +535,7 @@ int type1,type2;
|
|||
|
||||
int whilecnt, whilelabels[MAXDEPTH][2]; /*0=head,1=out */
|
||||
|
||||
whilestart()
|
||||
void whilestart(void)
|
||||
{
|
||||
whilecnt++;
|
||||
if ( whilecnt==MAXDEPTH)
|
||||
|
@ -567,8 +549,7 @@ whilestart()
|
|||
|
||||
|
||||
|
||||
whiletst(exprtype)
|
||||
int exprtype;
|
||||
void whiletst(int exprtype)
|
||||
{
|
||||
/* test expression type */
|
||||
conversion(exprtype,INTTYPE);
|
||||
|
@ -577,7 +558,7 @@ int exprtype;
|
|||
|
||||
|
||||
|
||||
wend()
|
||||
void wend(void)
|
||||
{
|
||||
if ( whilecnt<1)
|
||||
error("not part of while statement");
|
||||
|
@ -591,7 +572,7 @@ wend()
|
|||
|
||||
|
||||
/* generate code for the final version */
|
||||
prologcode()
|
||||
void prologcode(void)
|
||||
{
|
||||
/* generate the EM prolog code */
|
||||
C_df_dnam("fltnull");
|
||||
|
@ -623,7 +604,7 @@ prologcode()
|
|||
|
||||
|
||||
|
||||
prolog2()
|
||||
void prolog2(void)
|
||||
{
|
||||
int result;
|
||||
label l = genlabel(), l2;
|
||||
|
@ -659,7 +640,7 @@ prolog2()
|
|||
|
||||
|
||||
/* NEW */
|
||||
gendata()
|
||||
void gendata(void)
|
||||
{
|
||||
C_loc((arith)0);
|
||||
C_cal("_setchan");
|
||||
|
@ -685,7 +666,7 @@ gendata()
|
|||
|
||||
|
||||
|
||||
epilogcode()
|
||||
void epilogcode(void)
|
||||
{
|
||||
/* finalization code */
|
||||
int nr;
|
||||
|
|
64
lang/basic/src/gencode.h
Normal file
64
lang/basic/src/gencode.h
Normal file
|
@ -0,0 +1,64 @@
|
|||
/* 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__ */
|
|
@ -4,8 +4,11 @@
|
|||
*/
|
||||
|
||||
#include "bem.h"
|
||||
#include "util.h"
|
||||
#include "eval.h"
|
||||
#include "gencode.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -18,7 +21,7 @@ Linerecord *firstline,
|
|||
|
||||
|
||||
|
||||
List *newlist()
|
||||
List *newlist(void)
|
||||
{
|
||||
List *l;
|
||||
|
||||
|
@ -29,8 +32,7 @@ List *newlist()
|
|||
|
||||
/* Line management is handled here */
|
||||
|
||||
Linerecord *srchline(nr)
|
||||
int nr;
|
||||
Linerecord *srchline(int nr)
|
||||
{
|
||||
Linerecord *l;
|
||||
|
||||
|
@ -41,8 +43,7 @@ int nr;
|
|||
|
||||
|
||||
|
||||
List *srchforward(nr)
|
||||
int nr;
|
||||
List *srchforward(int nr)
|
||||
{
|
||||
List *l;
|
||||
|
||||
|
@ -53,7 +54,7 @@ int nr;
|
|||
|
||||
|
||||
|
||||
linewarnings()
|
||||
void linewarnings(void)
|
||||
{
|
||||
List *l;
|
||||
extern int errorcnt;
|
||||
|
@ -72,8 +73,7 @@ linewarnings()
|
|||
|
||||
|
||||
|
||||
newblock(nr)
|
||||
int nr;
|
||||
void newblock(int nr)
|
||||
{
|
||||
Linerecord *l;
|
||||
List *frwrd;
|
||||
|
@ -111,8 +111,7 @@ int nr;
|
|||
|
||||
|
||||
|
||||
gotolabel(nr)
|
||||
int nr;
|
||||
int gotolabel(int nr)
|
||||
{
|
||||
/* simulate a goto statement in the line record table */
|
||||
Linerecord *l1;
|
||||
|
@ -146,8 +145,7 @@ int nr;
|
|||
|
||||
|
||||
|
||||
gotostmt(nr)
|
||||
int nr;
|
||||
void gotostmt(int nr)
|
||||
{
|
||||
C_bra((label) gotolabel(nr));
|
||||
}
|
||||
|
@ -160,7 +158,7 @@ int gosubcnt=1;
|
|||
|
||||
|
||||
|
||||
List *gosublabel()
|
||||
List *gosublabel(void)
|
||||
{
|
||||
List *l;
|
||||
|
||||
|
@ -177,8 +175,7 @@ List *gosublabel()
|
|||
|
||||
|
||||
|
||||
gosubstmt(lab)
|
||||
int lab;
|
||||
void gosubstmt(int lab)
|
||||
{
|
||||
List *l;
|
||||
int nr,n;
|
||||
|
@ -197,7 +194,7 @@ int lab;
|
|||
|
||||
|
||||
|
||||
genreturns()
|
||||
void genreturns(void)
|
||||
{
|
||||
int count;
|
||||
int nr;
|
||||
|
@ -227,7 +224,7 @@ genreturns()
|
|||
|
||||
|
||||
|
||||
returnstmt()
|
||||
void returnstmt(void)
|
||||
{
|
||||
C_cal("_retstmt");
|
||||
C_lfr((arith) BEMINTSIZE);
|
||||
|
@ -242,8 +239,7 @@ List *jumphead,*jumptail;
|
|||
int jumpcnt;
|
||||
|
||||
|
||||
jumpelm(nr)
|
||||
int nr;
|
||||
void jumpelm(int nr)
|
||||
{
|
||||
List *l;
|
||||
|
||||
|
@ -260,8 +256,7 @@ int nr;
|
|||
|
||||
|
||||
|
||||
ongotostmt(type)
|
||||
int type;
|
||||
void ongotostmt(int type)
|
||||
{
|
||||
/* generate the code itself, index in on top of the stack */
|
||||
/* blurh, store the number of entries in the descriptor */
|
||||
|
@ -294,8 +289,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
ongosubstmt(type)
|
||||
int type;
|
||||
void ongosubstmt(int type)
|
||||
{
|
||||
List *l;
|
||||
int firstlabel;
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#ifndef __GRAPH_H_INCLUDED__
|
||||
#define __GRAPH_H_INCLUDED__
|
||||
|
||||
#ifndef NORCSID
|
||||
# define RCS_GRAPH "$Id$"
|
||||
#endif
|
||||
|
@ -35,3 +38,18 @@ extern Linerecord *firstline,
|
|||
extern List *forwardlabel;
|
||||
|
||||
extern List *gosublabel();
|
||||
extern void jumpelm(int nr);
|
||||
extern int gotolabel(int nr);
|
||||
extern void linewarnings(void);
|
||||
|
||||
/*-------------------------- Code generation ---------------------*/
|
||||
|
||||
|
||||
extern void genreturns(void);
|
||||
extern void gosubstmt(int lab);
|
||||
extern void gotostmt(int nr);
|
||||
extern void returnstmt(void);
|
||||
extern void ongosubstmt(int type);
|
||||
extern void ongotostmt(int type);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "bem.h"
|
||||
#include "util.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$";
|
||||
#endif
|
||||
|
||||
|
@ -13,9 +15,9 @@ static char rcs_id[] = "$Id$";
|
|||
|
||||
File *datfile;
|
||||
|
||||
extern void fillkex(void);
|
||||
|
||||
|
||||
initialize()
|
||||
void initialize(void)
|
||||
{
|
||||
register char *cindex, *cptr;
|
||||
int result1, result2;
|
||||
|
@ -33,7 +35,7 @@ initialize()
|
|||
}
|
||||
}
|
||||
cptr=datfname;
|
||||
while ( *cptr++ = *cindex++ );
|
||||
while ( (*cptr++ = *cindex++) !=0 );
|
||||
/* Strip trailing suffix */
|
||||
if ( cptr>datfname+3 && cptr[-3]=='.' ) cptr[-3]=0;
|
||||
strcat(datfname,".d");
|
||||
|
|
|
@ -3,16 +3,17 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "tokentab.h"
|
||||
#include "system.h"
|
||||
#include "print.h"
|
||||
|
||||
/* Mod van gertjan */
|
||||
extern int LLsymb;
|
||||
extern int toknum;
|
||||
|
||||
|
||||
error_char(format,ch)
|
||||
char *format;
|
||||
char ch;
|
||||
void error_char(char *format,char ch)
|
||||
{
|
||||
extern int listing,errorcnt;
|
||||
extern int basicline;
|
||||
|
@ -24,9 +25,7 @@ char ch;
|
|||
|
||||
|
||||
|
||||
error_string(format,str)
|
||||
char *format;
|
||||
char *str;
|
||||
void error_string(char* format,char* str)
|
||||
{
|
||||
extern int listing,errorcnt;
|
||||
extern int basicline;
|
||||
|
@ -38,8 +37,7 @@ char *str;
|
|||
|
||||
|
||||
|
||||
LLmessage( insertedtok )
|
||||
int insertedtok;
|
||||
void LLmessage(int insertedtok )
|
||||
{
|
||||
if ( insertedtok < 0 ) {
|
||||
error("Fatal stack overflow\n");
|
||||
|
|
11
lang/basic/src/options
Normal file
11
lang/basic/src/options
Normal file
|
@ -0,0 +1,11 @@
|
|||
User options:
|
||||
D parser debugging
|
||||
t line tracing
|
||||
d debug information
|
||||
E generate full listing
|
||||
L don't generate linenumbers and filename indications
|
||||
w suppress warning diagnostics
|
||||
VwN set word size to N bytes
|
||||
VpN set pointer size to N bytes
|
||||
VfN set real size to N bytes
|
||||
|
|
@ -3,9 +3,15 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#include "parsepar.h"
|
||||
#include "bem.h"
|
||||
#include <stdio.h>
|
||||
#include "print.h"
|
||||
#include "system.h"
|
||||
#include "util.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -18,9 +24,7 @@ int nolins=0; /* generate no LIN statements */
|
|||
|
||||
|
||||
|
||||
parseparams(argc,argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
void parseparams(int argc,char **argv)
|
||||
{
|
||||
int files=0 ;
|
||||
int i;
|
||||
|
|
23
lang/basic/src/parsepar.h
Normal file
23
lang/basic/src/parsepar.h
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* Copyright (c) 2019 ACK Project.
|
||||
* See the copyright notice in the ACK home directory,
|
||||
* in the file "Copyright".
|
||||
*
|
||||
*/
|
||||
#ifndef __PARSEPAR_H_INCLUDED__
|
||||
#define __PARSEPAR_H_INCLUDED__
|
||||
|
||||
/** -l listing required */
|
||||
extern int listing;
|
||||
/** -d compiler debugging */
|
||||
extern int debug;
|
||||
/** -w warning flags */
|
||||
extern int wflag;
|
||||
/** generate line tracing code. */
|
||||
extern int traceflag;
|
||||
/** generate LIN statements */
|
||||
extern int nolins;
|
||||
|
||||
|
||||
void parseparams(int argc,char **argv);
|
||||
|
||||
#endif /* __PARSEPAR_H_INCLUDED__ */
|
|
@ -3,9 +3,18 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#include "symbols.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "bem.h"
|
||||
#include "eval.h"
|
||||
#include "gencode.h"
|
||||
#include "util.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
|
||||
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -15,7 +24,11 @@ int deftype[128]; /* default type declarer */
|
|||
/* which may be set by OPTION BASE */
|
||||
|
||||
|
||||
initdeftype()
|
||||
/* Local declarations */
|
||||
static void get_space(int type,int size);
|
||||
|
||||
|
||||
void initdeftype(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -31,8 +44,7 @@ Symbol *alternate = NIL;
|
|||
|
||||
|
||||
|
||||
Symbol *srchsymbol(str)
|
||||
char *str;
|
||||
Symbol *srchsymbol(char* str)
|
||||
{
|
||||
Symbol *s;
|
||||
|
||||
|
@ -68,9 +80,7 @@ char *str;
|
|||
|
||||
|
||||
|
||||
void
|
||||
dcltype(s)
|
||||
Symbol *s;
|
||||
void dcltype(Symbol *s)
|
||||
{
|
||||
/* type declarer */
|
||||
int type;
|
||||
|
@ -79,7 +89,7 @@ Symbol *s;
|
|||
type=s->symtype;
|
||||
if (type==DEFAULTTYPE)
|
||||
/* use the default rule */
|
||||
type= deftype[*s->symname];
|
||||
type= deftype[(int)(*s->symname)];
|
||||
/* generate the emlabel too */
|
||||
if ( s->symalias==0)
|
||||
s->symalias= dclspace(type);
|
||||
|
@ -89,8 +99,7 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
dclarray(s)
|
||||
Symbol *s;
|
||||
void dclarray(Symbol *s)
|
||||
{
|
||||
int i; int size;
|
||||
|
||||
|
@ -122,8 +131,7 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
get_space(type,size)
|
||||
int type,size;
|
||||
static void get_space(int type,int size)
|
||||
{
|
||||
|
||||
switch ( type ) {
|
||||
|
@ -153,8 +161,7 @@ int type,size;
|
|||
|
||||
|
||||
|
||||
defarray(s)
|
||||
Symbol *s;
|
||||
void defarray(Symbol *s)
|
||||
{
|
||||
/* array is used without dim statement, set default limits */
|
||||
int i;
|
||||
|
@ -164,7 +171,7 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
dclspace(type)
|
||||
int dclspace(int type)
|
||||
{
|
||||
int nr;
|
||||
|
||||
|
@ -189,8 +196,7 @@ dclspace(type)
|
|||
|
||||
|
||||
/* SOME COMPILE TIME OPTIONS */
|
||||
optionbase(ival)
|
||||
int ival;
|
||||
void optionbase(int ival)
|
||||
{
|
||||
if ( ival<0 || ival>1)
|
||||
error("illegal option base value");
|
||||
|
@ -199,8 +205,7 @@ int ival;
|
|||
|
||||
|
||||
|
||||
setdefaulttype(type)
|
||||
int type;
|
||||
void setdefaulttype(int type)
|
||||
{
|
||||
extern char *cptr;
|
||||
char first,last,i;
|
||||
|
@ -233,8 +238,7 @@ Symbol *fcn;
|
|||
|
||||
|
||||
|
||||
newscope(s)
|
||||
Symbol *s;
|
||||
void newscope(Symbol *s)
|
||||
{
|
||||
if (debug) print("new scope for %s\n",s->symname);
|
||||
alternate= firstsym;
|
||||
|
@ -253,7 +257,7 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
heading( )
|
||||
void heading(void)
|
||||
{
|
||||
char procname[50];
|
||||
|
||||
|
@ -265,7 +269,7 @@ heading( )
|
|||
|
||||
|
||||
|
||||
int fcnsize()
|
||||
static int fcnsize(void)
|
||||
{
|
||||
/* generate portable function size */
|
||||
int i,sum; /* sum is NEW */
|
||||
|
@ -278,8 +282,7 @@ int fcnsize()
|
|||
|
||||
|
||||
|
||||
endscope(type)
|
||||
int type;
|
||||
void endscope(int type)
|
||||
{
|
||||
Symbol *s;
|
||||
|
||||
|
@ -304,8 +307,7 @@ int type;
|
|||
|
||||
|
||||
|
||||
dclparm(s)
|
||||
Symbol *s;
|
||||
void dclparm(Symbol *s)
|
||||
{
|
||||
int size=0;
|
||||
|
||||
|
@ -327,8 +329,7 @@ int fcnindex= -1;
|
|||
|
||||
|
||||
|
||||
fcncall(s)
|
||||
Symbol *s;
|
||||
int fcncall(Symbol *s)
|
||||
{
|
||||
if ( !s->isfunction)
|
||||
error("Function not declared");
|
||||
|
@ -342,8 +343,7 @@ Symbol *s;
|
|||
|
||||
|
||||
|
||||
fcnend(parmcount)
|
||||
int parmcount;
|
||||
int fcnend(int parmcount)
|
||||
{
|
||||
int type;
|
||||
static char concatbuf[50]; /* NEW */
|
||||
|
@ -366,8 +366,7 @@ int parmcount;
|
|||
|
||||
|
||||
|
||||
callparm(ind,type)
|
||||
int ind,type;
|
||||
void callparm(int ind,int type)
|
||||
{
|
||||
if ( fcnindex<0) error("unexpected parameter");
|
||||
if ( ind >= fcn->dimensions)
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#ifndef __SYMBOLS_H_INCLUDED__
|
||||
#define __SYMBOLS_H_INCLUDED__
|
||||
|
||||
#ifndef NORCSID
|
||||
# define RCS_SYMB "$Id$"
|
||||
#endif
|
||||
|
@ -85,4 +88,21 @@ typedef struct SYMBOL{
|
|||
int isparam;
|
||||
} Symbol;
|
||||
|
||||
extern Symbol *srchsymbol();
|
||||
void initdeftype(void);
|
||||
Symbol *srchsymbol(char* str);
|
||||
void dcltype(Symbol *s);
|
||||
void dclarray(Symbol *s);
|
||||
void defarray(Symbol *s);
|
||||
int dclspace(int type);
|
||||
void optionbase(int ival);
|
||||
void setdefaulttype(int type);
|
||||
void newscope(Symbol *s);
|
||||
void heading(void);
|
||||
void endscope(int type);
|
||||
void dclparm(Symbol *s);
|
||||
int fcncall(Symbol *s);
|
||||
int fcnend(int parmcount);
|
||||
void callparm(int ind,int type);
|
||||
|
||||
#endif /* __SYMBOLS_H_INCLUDED__ */
|
||||
|
||||
|
|
|
@ -3,9 +3,12 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
#include "util.h"
|
||||
#include "bem.h"
|
||||
|
||||
#ifndef NORSCID
|
||||
|
||||
#ifndef NORCSID
|
||||
static char rcs_id[] = "$Id$" ;
|
||||
#endif
|
||||
|
||||
|
@ -16,25 +19,8 @@ int errorcnt;
|
|||
|
||||
|
||||
|
||||
void
|
||||
warning(str)
|
||||
char *str;
|
||||
{
|
||||
if (wflag) return;
|
||||
Xerror("WARNING", str);
|
||||
}
|
||||
|
||||
|
||||
error(str)
|
||||
char *str;
|
||||
{
|
||||
Xerror("ERROR", str);
|
||||
errorcnt++;
|
||||
}
|
||||
|
||||
Xerror(type, str)
|
||||
char *str;
|
||||
char *type;
|
||||
static void Xerror(char *type, char *str)
|
||||
{
|
||||
extern int listing;
|
||||
extern int basicline;
|
||||
|
@ -45,8 +31,23 @@ char *type;
|
|||
|
||||
|
||||
|
||||
fatal(str)
|
||||
char *str;
|
||||
|
||||
void warning(char* str)
|
||||
{
|
||||
if (wflag) return;
|
||||
Xerror("WARNING", str);
|
||||
}
|
||||
|
||||
|
||||
void error(char* str)
|
||||
{
|
||||
Xerror("ERROR", str);
|
||||
errorcnt++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void fatal(char* str)
|
||||
{
|
||||
Xerror("FATAL",str);
|
||||
C_close();
|
||||
|
@ -55,22 +56,21 @@ char *str;
|
|||
|
||||
|
||||
|
||||
notyetimpl()
|
||||
void notyetimpl(void)
|
||||
{
|
||||
warning("not yet implemented");
|
||||
}
|
||||
|
||||
|
||||
|
||||
illegalcmd()
|
||||
void illegalcmd(void)
|
||||
{
|
||||
warning("illegal command");
|
||||
}
|
||||
|
||||
|
||||
|
||||
char *myitoa(i)
|
||||
int i;
|
||||
char *myitoa(int i)
|
||||
{
|
||||
static char buf[30];
|
||||
|
||||
|
@ -79,12 +79,7 @@ int i;
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
char *salloc(length)
|
||||
unsigned length;
|
||||
char *salloc(unsigned int length)
|
||||
{
|
||||
char *s,*c;
|
||||
|
||||
|
|
32
lang/basic/src/util.h
Normal file
32
lang/basic/src/util.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
/* Copyright (c) 2019 ACK Project.
|
||||
* See the copyright notice in the ACK home directory,
|
||||
* in the file "Copyright".
|
||||
*
|
||||
*/
|
||||
#ifndef __UTIL_H_INCLUDED__
|
||||
#define __UTIL_H_INCLUDED__
|
||||
|
||||
/** Raises a warning with the specified message. */
|
||||
void warning(char* str);
|
||||
/** Raises a non fatal error with the specified message. */
|
||||
void error(char* str);
|
||||
/** Raises a fatal error with the specified message and
|
||||
quits the application. */
|
||||
void fatal(char* str);
|
||||
/** Error management to raise a warning on an unimplemented
|
||||
* feature. */
|
||||
void notyetimpl(void);
|
||||
/** Error management to raise a warning on an illegal command
|
||||
line option. */
|
||||
void illegalcmd(void);
|
||||
|
||||
|
||||
char *myitoa(int i);
|
||||
|
||||
/** Tries to allocates a memory block of the specified number of bytes, and exits
|
||||
* with a fatal error upon a failure. Upon allocation success, fills the allocated
|
||||
* memory block with binary 0.
|
||||
*/
|
||||
char *salloc(unsigned int length);
|
||||
|
||||
#endif /* __UTIL_H_INCLUDED__ */
|
|
@ -5,7 +5,9 @@
|
|||
|
||||
int toknum;
|
||||
|
||||
yylexp()
|
||||
extern int yylex(void);
|
||||
|
||||
int yylexp(void)
|
||||
{
|
||||
/* als toknum != 0 dan bevat toknum een door LLmessage back-ge-pushed token */
|
||||
|
||||
|
|
Loading…
Reference in a new issue