Starting ANSI C frontend

This commit is contained in:
Manoel Trapier 2013-03-14 16:10:42 +01:00 committed by Manoël Trapier
parent 452127650a
commit 03763cbbf0
6 changed files with 63 additions and 79 deletions

View File

@ -1,5 +1,5 @@
!File: lint.h
/*#define LINT 1 /* if defined, 'lint' is produced */
/*#define LINT 1*/ /* if defined, 'lint' is produced */
!File: pathlength.h
@ -75,7 +75,7 @@
!File: botch_free.h
/*#define BOTCH_FREE 1 /* when defined, botch freed memory, as a check */
/*#define BOTCH_FREE 1*/ /* when defined, botch freed memory, as a check */
!File: dataflow.h
@ -83,7 +83,7 @@
!File: debug.h
/*#define DEBUG 1 /* perform various self-tests */
/*#define DEBUG 1*/ /* perform various self-tests */
#define NDEBUG 1 /* disable assertions */
@ -112,17 +112,17 @@
!File: nopp.h
/*#define NOPP 1 /* if NOT defined, use built-int preprocessor */
/*#define NOPP 1*/ /* if NOT defined, use built-int preprocessor */
!File: nobitfield.h
/*#define NOBITFIELD 1 /* if NOT defined, implement bitfields */
/*#define NOBITFIELD 1*/ /* if NOT defined, implement bitfields */
!File: spec_arith.h
/* describes internal compiler arithmetics */
#undef SPECIAL_ARITHMETICS /* something different from native long */
/*#define UNSIGNED_ARITH unsigned arith /* if it is supported */
/*#define UNSIGNED_ARITH unsigned arith*/ /* if it is supported */
!File: static.h
@ -130,11 +130,11 @@
!File: nocross.h
/*#define NOCROSS 1 /* if NOT defined, cross compiler */
/*#define NOCROSS 1*/ /* if NOT defined, cross compiler */
!File: regcount.h
/*#define REGCOUNT 1 /* count occurrences for register messages */
/*#define REGCOUNT 1*/ /* count occurrences for register messages */
!File: dbsymtab.h

View File

@ -62,7 +62,7 @@ static LexSP = 0;
E.g. at the invocation of a sub-parser that uses LLlex(), the
state of the current parser should be saved.
*/
PushLex()
void PushLex()
{
ASSERT(LexSP < MAX_LL_DEPTH);
ASSERT(ASIDE == 0); /* ASIDE = 0; */
@ -70,15 +70,14 @@ PushLex()
LexStack[LexSP++] = dot;
}
PopLex()
void PopLex()
{
ASSERT(LexSP > 0);
dot = LexStack[--LexSP];
}
#endif /* NOPP */
int
LLlex()
int LLlex()
{
/* LLlex() plays the role of Lexical Analyzer for the C parser.
The look-ahead and putting aside of tokens are taken into
@ -108,12 +107,13 @@ LLlex()
}
char *string_token();
arith char_constant();
char *string_token(char *nm, int stop_char, int *plen);
arith char_constant(char *nm);
void skipcomment();
void strint2tok(char intbuf[], struct token *ptok);
void strflt2tok(char fltbuf[], struct token *ptok);
int
GetToken(ptok)
register struct token *ptok;
int GetToken(struct token *ptok)
{
/* GetToken() is the actual token recognizer. It calls the
control line interpreter if it encounters a "\n{w}*#"
@ -121,7 +121,7 @@ GetToken(ptok)
needed.
*/
char buf[(IDFSIZE > NUMSIZE ? IDFSIZE : NUMSIZE) + 1];
register int ch, nch;
int ch, nch;
token_nmb++;
@ -227,8 +227,7 @@ garbage:
case '<':
if (AccFileSpecifier) {
UnGetChar(); /* pushback nch */
ptok->tk_bts = string_token("file specifier",
'>', &(ptok->tk_len));
ptok->tk_bts = string_token("file specifier", '>', &(ptok->tk_len));
return ptok->tk_symb = FILESPECIFIER;
}
if (nch == '<') {
@ -312,10 +311,10 @@ garbage:
/* fallthrough */
case STIDF:
{
register char *tg = &buf[0];
register int pos = -1;
register struct idf *idef;
extern int idfsize; /* ??? */
char *tg = &buf[0];
int pos = -1;
struct idf *idef;
int idfsize; /* ??? */
#ifndef NOPP
int NoExpandNext = 0;
@ -361,8 +360,8 @@ garbage:
}
case STNUM: /* a numeric constant */
{
register int siz_left = NUMSIZE - 1;
register char *np = &buf[0];
int siz_left = NUMSIZE - 1;
char *np = &buf[0];
int flags = 0;
#define store(ch) if (--siz_left >= 0) \
@ -444,10 +443,11 @@ garbage:
crash("bad class for char 0%o", ch);
}
/*NOTREACHED*/
return 0;
}
#ifndef NOPP
skipcomment()
void skipcomment()
{
/* The last character read has been the '*' of '/_*'. The
characters, except NL and EOI, between '/_*' and the first
@ -459,7 +459,7 @@ skipcomment()
EOI is returned by LoadChar only on encountering EOF of the
top-level file...
*/
register int c, oldc = '\0';
int c, oldc = '\0';
NoUnstack++;
c = GetChar();
@ -501,12 +501,10 @@ skipcomment()
}
#endif /* NOPP */
arith
char_constant(nm)
char *nm;
arith char_constant(char *nm)
{
register arith val = 0;
register int ch;
arith val = 0;
int ch;
int size = 0;
ch = GetChar();
@ -534,15 +532,12 @@ char_constant(nm)
return val;
}
char *
string_token(nm, stop_char, plen)
char *nm;
int *plen;
char *string_token(char *nm, int stop_char, int *plen)
{
register int ch;
register int str_size;
register char *str = Malloc((unsigned) (str_size = ISTRSIZE));
register int pos = 0;
int ch;
int str_size;
char *str = Malloc((unsigned) (str_size = ISTRSIZE));
int pos = 0;
ch = GetChar();
while (ch != stop_char) {
@ -567,9 +562,7 @@ string_token(nm, stop_char, plen)
return str;
}
int
quoted(ch)
register int ch;
int quoted(int ch)
{
/* quoted() replaces an escaped character sequence by the
character meant.
@ -628,9 +621,7 @@ quoted(ch)
}
int
hex_val(ch)
register int ch;
int hex_val(int ch)
{
return is_dig(ch) ? ch - '0'
: is_hex(ch) ? (ch - 'a' + 10) & 017
@ -638,13 +629,12 @@ hex_val(ch)
}
int
GetChar()
int GetChar()
{
/* The routines GetChar and trigraph parses the trigraph
sequences and removes occurences of \\\n.
*/
register int ch;
int ch;
#ifndef NOPP
again:
@ -671,10 +661,9 @@ again:
}
#ifndef NOPP
int
trigraph()
int trigraph()
{
register int ch;
int ch;
LoadChar(ch);
if (ch == '?') {
@ -718,11 +707,9 @@ trigraph()
/* strflt2tok only checks the syntax of the floating-point number and
* selects the right type for the number.
*/
strflt2tok(fltbuf, ptok)
char fltbuf[];
struct token *ptok;
void strflt2tok(char fltbuf[], struct token *ptok)
{
register char *cp = fltbuf;
char *cp = fltbuf;
int malformed = 0;
while (is_dig(*cp)) cp++;
@ -757,11 +744,9 @@ struct token *ptok;
}
}
strint2tok(intbuf, ptok)
char intbuf[];
struct token *ptok;
void strint2tok(char intbuf[], struct token *ptok)
{
register char *cp = intbuf;
char *cp = intbuf;
int base = 10;
arith val = 0, dig, ubound;
int uns_flg = 0, lng_flg = 0, malformed = 0, ovfl = 0;

View File

@ -11,9 +11,10 @@
#include "LLlex.h"
#include "Lpars.h"
extern char *symbol2str();
char *symbol2str(int tok);
LLmessage(tk) {
void LLmessage(tk)
{
err_occurred = 1;
if (tk < 0) {
error("end of file expected");

View File

@ -1,5 +1,5 @@
!File: lint.h
/*#define LINT 1 /* if defined, 'lint' is produced */
/*#define LINT 1*/ /* if defined, 'lint' is produced */
!File: pathlength.h
@ -75,24 +75,24 @@
!File: botch_free.h
/*#define BOTCH_FREE 1 /* when defined, botch freed memory, as a check */
/*#define BOTCH_FREE 1*/ /* when defined, botch freed memory, as a check */
!File: dataflow.h
/*#define DATAFLOW 1 /* produce some compile-time xref */
/*#define DATAFLOW 1*/ /* produce some compile-time xref */
!File: debug.h
/*#define DEBUG 1 /* perform various self-tests */
/*#define DEBUG 1*/ /* perform various self-tests */
#define NDEBUG 1 /* disable assertions */
!File: use_tmp.h
/*#define PREPEND_SCOPES 1 /* collect exa, exp, ina and inp commands
/*#define PREPEND_SCOPES 1*/ /* collect exa, exp, ina and inp commands
and if USE_TMP is defined let them
precede the rest of the generated
compact code */
/*#define USE_TMP 1 /* use C_insertpart, C_endpart mechanism
/*#define USE_TMP 1*/ /* use C_insertpart, C_endpart mechanism
to generate EM-code in the order needed
for the code-generators. If not defined,
the old-style peephole optimizer is
@ -108,7 +108,7 @@
!File: inputtype.h
/*#define INP_READ_IN_ONE 1 /* read input file in one */
/*#define INP_READ_IN_ONE 1*/ /* read input file in one */
!File: nopp.h
@ -116,13 +116,13 @@
!File: nobitfield.h
/*#define NOBITFIELD 1 /* if NOT defined, implement bitfields */
/*#define NOBITFIELD 1*/ /* if NOT defined, implement bitfields */
!File: spec_arith.h
/* describes internal compiler arithmetics */
#undef SPECIAL_ARITHMETICS /* something different from native long */
/*#define UNSIGNED_ARITH unsigned arith /* if it is supported */
/*#define UNSIGNED_ARITH unsigned arith*/ /* if it is supported */
!File: static.h
@ -130,14 +130,14 @@
!File: nocross.h
/*#define NOCROSS 1 /* if NOT defined, cross compiler */
/*#define NOCROSS 1*/ /* if NOT defined, cross compiler */
!File: regcount.h
/*#define REGCOUNT 1 /* count occurrences for register messages */
/*#define REGCOUNT 1*/ /* count occurrences for register messages */
!File: dbsymtab.h
/*#define DBSYMTAB 1 /* ability to produce symbol table for debugger */
/*#define DBSYMTAB 1*/ /* ability to produce symbol table for debugger */

View File

@ -21,7 +21,7 @@
extern char options[];
extern arith full_mask[/*MAXSIZE + 1*/]; /* cstoper.c */
char *symbol2str();
char *symbol2str(int tok);
ch3mon(oper, expp)
register struct expr **expp;

View File

@ -5,9 +5,7 @@ cat <<'--EOT--'
/* $Id$ */
#include "Lpars.h"
char *
symbol2str(tok)
int tok;
char *symbol2str(int tok)
{
#define SIZBUF 8
/* allow for a few invocations in f.i. an argument list */