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