Home | History | Annotate | Line # | Download | only in ksh
lex.h revision 1.1.1.3
      1      1.1  jtc /*
      2      1.1  jtc  * Source input, lexer and parser
      3      1.1  jtc  */
      4      1.1  jtc 
      5      1.1  jtc /* $Id: lex.h,v 1.1.1.3 1996/10/09 15:29:20 jtc Exp $ */
      6      1.1  jtc 
      7      1.1  jtc #define	IDENT	64
      8      1.1  jtc 
      9      1.1  jtc typedef struct source Source;
     10      1.1  jtc struct source {
     11      1.1  jtc 	const char *str;	/* input pointer */
     12      1.1  jtc 	int	type;		/* input type */
     13      1.1  jtc 	char const *start;	/* start of current buffer */
     14      1.1  jtc 	union {
     15      1.1  jtc 		char **strv;	/* string [] */
     16      1.1  jtc 		struct shf *shf; /* shell file */
     17  1.1.1.3  jtc 		struct tbl *tblp; /* alias (SALIAS) */
     18      1.1  jtc 		char *freeme;	/* also for SREREAD */
     19      1.1  jtc 	} u;
     20  1.1.1.3  jtc 	char	ugbuf[2];	/* buffer for ungetsc() (SREREAD) and
     21  1.1.1.3  jtc 				 * alias (SALIAS) */
     22      1.1  jtc 	int	line;		/* line number */
     23      1.1  jtc 	int	errline;	/* line the error occured on (0 if not set) */
     24      1.1  jtc 	const char *file;	/* input file name */
     25      1.1  jtc 	int	flags;		/* SF_* */
     26      1.1  jtc 	Area	*areap;
     27      1.1  jtc 	XString	xs;		/* input buffer */
     28      1.1  jtc 	Source *next;		/* stacked source */
     29      1.1  jtc };
     30      1.1  jtc 
     31      1.1  jtc /* Source.type values */
     32      1.1  jtc #define	SEOF		0	/* input EOF */
     33      1.1  jtc #define	SFILE		1	/* file input */
     34      1.1  jtc #define SSTDIN		2	/* read stdin */
     35      1.1  jtc #define	SSTRING		3	/* string */
     36      1.1  jtc #define	SWSTR		4	/* string without \n */
     37      1.1  jtc #define	SWORDS		5	/* string[] */
     38      1.1  jtc #define	SWORDSEP	6	/* string[] seperator */
     39      1.1  jtc #define	SALIAS		7	/* alias expansion */
     40      1.1  jtc #define SREREAD		8	/* read ahead to be re-scanned */
     41      1.1  jtc 
     42      1.1  jtc /* Source.flags values */
     43      1.1  jtc #define SF_ECHO		BIT(0)	/* echo input to shlout */
     44      1.1  jtc #define SF_ALIAS	BIT(1)	/* faking space at end of alias */
     45      1.1  jtc #define SF_ALIASEND	BIT(2)	/* faking space at end of alias */
     46      1.1  jtc #define SF_TTY		BIT(3)	/* type == SSTDIN & it is a tty */
     47      1.1  jtc 
     48      1.1  jtc /*
     49      1.1  jtc  * states while lexing word
     50      1.1  jtc  */
     51      1.1  jtc #define	SBASE	0		/* outside any lexical constructs */
     52      1.1  jtc #define	SWORD	1		/* implicit quoting for substitute() */
     53  1.1.1.2  jtc #ifdef KSH
     54      1.1  jtc #define	SDPAREN	2		/* inside (( )), implicit quoting */
     55  1.1.1.2  jtc #endif /* KSH */
     56      1.1  jtc #define	SSQUOTE	3		/* inside '' */
     57      1.1  jtc #define	SDQUOTE	4		/* inside "" */
     58      1.1  jtc #define	SBRACE	5		/* inside ${} */
     59      1.1  jtc #define	SPAREN	6		/* inside $() */
     60      1.1  jtc #define	SBQUOTE	7		/* inside `` */
     61      1.1  jtc #define	SDDPAREN 8		/* inside $(( )) */
     62      1.1  jtc #define SHEREDELIM 9		/* parsing <<,<<- delimiter */
     63      1.1  jtc #define SHEREDQUOTE 10		/* parsing " in <<,<<- delimiter */
     64      1.1  jtc #define SPATTERN 11		/* parsing *(...|...) pattern (*+?@!) */
     65      1.1  jtc #define STBRACE 12		/* parsing ${..[#%]..} */
     66      1.1  jtc 
     67      1.1  jtc typedef union {
     68      1.1  jtc 	int	i;
     69      1.1  jtc 	char   *cp;
     70      1.1  jtc 	char  **wp;
     71      1.1  jtc 	struct op *o;
     72      1.1  jtc 	struct ioword *iop;
     73      1.1  jtc } YYSTYPE;
     74      1.1  jtc 
     75      1.1  jtc /* If something is added here, add it to tokentab[] in syn.c as well */
     76      1.1  jtc #define	LWORD	256
     77      1.1  jtc #define	LOGAND	257		/* && */
     78      1.1  jtc #define	LOGOR	258		/* || */
     79      1.1  jtc #define	BREAK	259		/* ;; */
     80      1.1  jtc #define	IF	260
     81      1.1  jtc #define	THEN	261
     82      1.1  jtc #define	ELSE	262
     83      1.1  jtc #define	ELIF	263
     84      1.1  jtc #define	FI	264
     85      1.1  jtc #define	CASE	265
     86      1.1  jtc #define	ESAC	266
     87      1.1  jtc #define	FOR	267
     88      1.1  jtc #define SELECT	268
     89      1.1  jtc #define	WHILE	269
     90      1.1  jtc #define	UNTIL	270
     91      1.1  jtc #define	DO	271
     92      1.1  jtc #define	DONE	272
     93      1.1  jtc #define	IN	273
     94      1.1  jtc #define	FUNCTION 274
     95      1.1  jtc #define	TIME	275
     96      1.1  jtc #define	REDIR	276
     97  1.1.1.2  jtc #ifdef KSH
     98      1.1  jtc #define MDPAREN	277		/* (( )) */
     99  1.1.1.2  jtc #endif /* KSH */
    100      1.1  jtc #define BANG	278		/* ! */
    101      1.1  jtc #define DBRACKET 279		/* [[ .. ]] */
    102      1.1  jtc #define COPROC	280		/* |& */
    103      1.1  jtc #define	YYERRCODE 300
    104      1.1  jtc 
    105      1.1  jtc /* flags to yylex */
    106      1.1  jtc #define	CONTIN	BIT(0)		/* skip new lines to complete command */
    107      1.1  jtc #define	ONEWORD	BIT(1)		/* single word for substitute() */
    108      1.1  jtc #define	ALIAS	BIT(2)		/* recognize alias */
    109      1.1  jtc #define	KEYWORD	BIT(3)		/* recognize keywords */
    110      1.1  jtc #define LETEXPR	BIT(4)		/* get expression inside (( )) */
    111      1.1  jtc #define VARASN	BIT(5)		/* check for var=word */
    112      1.1  jtc #define ARRAYVAR BIT(6)		/* parse x[1 & 2] as one word */
    113      1.1  jtc #define ESACONLY BIT(7)		/* only accept esac keyword */
    114      1.1  jtc #define CMDWORD BIT(8)		/* parsing simple command (alias related) */
    115      1.1  jtc #define HEREDELIM BIT(9)	/* parsing <<,<<- delimiter */
    116      1.1  jtc 
    117      1.1  jtc #define	HERES	10		/* max << in line */
    118      1.1  jtc 
    119      1.1  jtc EXTERN	Source *source;		/* yyparse/yylex source */
    120      1.1  jtc EXTERN	YYSTYPE	yylval;		/* result from yylex */
    121      1.1  jtc EXTERN	int	yynerrs;
    122      1.1  jtc EXTERN	struct ioword *heres [HERES], **herep;
    123      1.1  jtc EXTERN	char	ident [IDENT+1];
    124      1.1  jtc 
    125      1.1  jtc #ifdef HISTORY
    126      1.1  jtc # define HISTORYSIZE	128	/* size of saved history */
    127      1.1  jtc 
    128      1.1  jtc EXTERN	char  **history;	/* saved commands */
    129      1.1  jtc EXTERN	char  **histptr;	/* last history item */
    130      1.1  jtc EXTERN	int	histsize;	/* history size */
    131      1.1  jtc #endif /* HISTORY */
    132