Description
#include
#include
#include
#include
/*
Something like Python
>> y = 2
>> z = 2
>> x = 3*y + 4/(2*z)
*/
/*
the only type: integer
everything is an expression
statement := END | expr END
expr := term expr_tail
expr_tail := ADDSUB term expr_tail | NIL
term := factor term_tail
term_tail := MULDIV factor term_tail | NIL
factor := INT | ADDSUB INT | ADDSUB ID | ID ASSIGN expr | ID | LPAREN expr RPAREN
*/
#ifndef __LEX__
#define __LEX__
#define MAXLEN 256
typedef enum {UNKNOWN, END, INT, ID, ADDSUB, MULDIV, ASSIGN,
LPAREN, RPAREN} TokenSet;
char lexeme[MAXLEN];
extern int match (TokenSet token);
extern void advance(void);
#endif // __LEX__
static TokenSet getToken(void);
static TokenSet lookahead = UNKNOWN;
TokenSet getToken(void)
{
int i;
char c;
while ( (c = fgetc(stdin)) == ' ' || c== '\t' ); // deal with space
if (isdigit(c)) {
lexeme[0] = c;
c = fgetc(stdin);
i = 1;
while (isdigit(c) && i
Input
Output
Tags