📄 y.tab.c
字号:
static int token_is_assignment __P((char *, int));static int token_is_ident __P((char *, int));#endifstatic int read_token_word __P((int));static void discard_parser_constructs __P((int));static char *error_token_from_token __P((int));static char *error_token_from_text __P((void));static void print_offending_line __P((void));static void report_syntax_error __P((char *));static void handle_eof_input_unit __P((void));static void prompt_again __P((void));#if 0static void reset_readline_prompt __P((void));#endifstatic void print_prompt __P((void));#if defined (HANDLE_MULTIBYTE)static void set_line_mbstate __P((void));static char *shell_input_line_property = NULL;#else# define set_line_mbstate()#endifextern int yyerror __P((const char *));#ifdef DEBUGextern int yydebug;#endif/* Default prompt strings */char *primary_prompt = PPROMPT;char *secondary_prompt = SPROMPT;/* PROMPT_STRING_POINTER points to one of these, never to an actual string. */char *ps1_prompt, *ps2_prompt;/* Handle on the current prompt string. Indirectly points through ps1_ or ps2_prompt. */char **prompt_string_pointer = (char **)NULL;char *current_prompt_string;/* Non-zero means we expand aliases in commands. */int expand_aliases = 0;/* If non-zero, the decoded prompt string undergoes parameter and variable substitution, command substitution, arithmetic substitution, string expansion, process substitution, and quote removal in decode_prompt_string. */int promptvars = 1;/* If non-zero, $'...' and $"..." are expanded when they appear within a ${...} expansion, even when the expansion appears within double quotes. */int extended_quote = 1;/* The number of lines read from input while creating the current command. */int current_command_line_count;/* The number of lines in a command saved while we run parse_and_execute */int saved_command_line_count;/* The token that currently denotes the end of parse. */int shell_eof_token;/* The token currently being read. */int current_token;/* The current parser state. */int parser_state;/* Variables to manage the task of reading here documents, because we need to defer the reading until after a complete command has been collected. */static REDIRECT *redir_stack[10];int need_here_doc;/* Where shell input comes from. History expansion is performed on each line when the shell is interactive. */static char *shell_input_line = (char *)NULL;static int shell_input_line_index;static int shell_input_line_size; /* Amount allocated for shell_input_line. */static int shell_input_line_len; /* strlen (shell_input_line) *//* Either zero or EOF. */static int shell_input_line_terminator;/* The line number in a script on which a function definition starts. */static int function_dstart;/* The line number in a script on which a function body starts. */static int function_bstart;/* The line number in a script at which an arithmetic for command starts. */static int arith_for_lineno;/* The decoded prompt string. Used if READLINE is not defined or if editing is turned off. Analogous to current_readline_prompt. */static char *current_decoded_prompt;/* The last read token, or NULL. read_token () uses this for context checking. */static int last_read_token;/* The token read prior to last_read_token. */static int token_before_that;/* The token read prior to token_before_that. */static int two_tokens_ago;static int global_extglob;/* The line number in a script where the word in a `case WORD', `select WORD' or `for WORD' begins. This is a nested command maximum, since the array index is decremented after a case, select, or for command is parsed. */#define MAX_CASE_NEST 128static int word_lineno[MAX_CASE_NEST];static int word_top = -1;/* If non-zero, it is the token that we want read_token to return regardless of what text is (or isn't) present to be read. This is reset by read_token. If token_to_read == WORD or ASSIGNMENT_WORD, yylval.word should be set to word_desc_to_read. */static int token_to_read;static WORD_DESC *word_desc_to_read;static REDIRECTEE source;static REDIRECTEE redir;/* Enabling traces. */#ifndef YYDEBUG# define YYDEBUG 0#endif/* Enabling verbose error messages. */#ifdef YYERROR_VERBOSE# undef YYERROR_VERBOSE# define YYERROR_VERBOSE 1#else# define YYERROR_VERBOSE 0#endif/* Enabling the token table. */#ifndef YYTOKEN_TABLE# define YYTOKEN_TABLE 0#endif#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLAREDtypedef union YYSTYPE#line 323 "/Users/chet/src/bash/src/parse.y"{ WORD_DESC *word; /* the word that we read. */ int number; /* the number that we read. */ WORD_LIST *word_list; COMMAND *command; REDIRECT *redirect; ELEMENT element; PATTERN_LIST *pattern;}/* Line 187 of yacc.c. */#line 506 "y.tab.c" YYSTYPE;# define yystype YYSTYPE /* obsolescent; will be withdrawn */# define YYSTYPE_IS_DECLARED 1# define YYSTYPE_IS_TRIVIAL 1#endif/* Copy the second part of user declarations. *//* Line 216 of yacc.c. */#line 519 "y.tab.c"#ifdef short# undef short#endif#ifdef YYTYPE_UINT8typedef YYTYPE_UINT8 yytype_uint8;#elsetypedef unsigned char yytype_uint8;#endif#ifdef YYTYPE_INT8typedef YYTYPE_INT8 yytype_int8;#elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER)typedef signed char yytype_int8;#elsetypedef short int yytype_int8;#endif#ifdef YYTYPE_UINT16typedef YYTYPE_UINT16 yytype_uint16;#elsetypedef unsigned short int yytype_uint16;#endif#ifdef YYTYPE_INT16typedef YYTYPE_INT16 yytype_int16;#elsetypedef short int yytype_int16;#endif#ifndef YYSIZE_T# ifdef __SIZE_TYPE__# define YYSIZE_T __SIZE_TYPE__# elif defined size_t# define YYSIZE_T size_t# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER)# include <stddef.h> /* INFRINGES ON USER NAME SPACE */# define YYSIZE_T size_t# else# define YYSIZE_T unsigned int# endif#endif#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)#ifndef YY_# if YYENABLE_NLS# if ENABLE_NLS# include <libintl.h> /* INFRINGES ON USER NAME SPACE */# define YY_(msgid) dgettext ("bison-runtime", msgid)# endif# endif# ifndef YY_# define YY_(msgid) msgid# endif#endif/* Suppress unused-variable warnings by "using" E. */#if ! defined lint || defined __GNUC__# define YYUSE(e) ((void) (e))#else# define YYUSE(e) /* empty */#endif/* Identity function, used to suppress warnings about constant conditions. */#ifndef lint# define YYID(n) (n)#else#if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER)static intYYID (int i)#elsestatic intYYID (i) int i;#endif{ return i;}#endif#if ! defined yyoverflow || YYERROR_VERBOSE/* The parser invokes alloca or malloc; define the necessary symbols. */# ifdef YYSTACK_USE_ALLOCA# if YYSTACK_USE_ALLOCA# ifdef __GNUC__# define YYSTACK_ALLOC __builtin_alloca# elif defined __BUILTIN_VA_ARG_INCR# include <alloca.h> /* INFRINGES ON USER NAME SPACE */# elif defined _AIX# define YYSTACK_ALLOC __alloca# elif defined _MSC_VER# include <malloc.h> /* INFRINGES ON USER NAME SPACE */# define alloca _alloca# else# define YYSTACK_ALLOC alloca# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER)# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */# ifndef _STDLIB_H# define _STDLIB_H 1# endif# endif# endif# endif# endif# ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))# ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */# endif# else# define YYSTACK_ALLOC YYMALLOC# define YYSTACK_FREE YYFREE# ifndef YYSTACK_ALLOC_MAXIMUM# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM# endif# if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free)))# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */# ifndef _STDLIB_H# define _STDLIB_H 1# endif# endif# ifndef YYMALLOC# define YYMALLOC malloc# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER)void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */# endif# endif# ifndef YYFREE# define YYFREE free# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER)void free (void *); /* INFRINGES ON USER NAME SPACE */# endif# endif# endif#endif /* ! defined yyoverflow || YYERROR_VERBOSE */#if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))/* A type that is properly aligned for any stack member. */union yyalloc{ yytype_int16 yyss; YYSTYPE yyvs; };/* The size of the maximum gap between one aligned stack and the next. */# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -