ldlex.l

来自「基于4个mips核的noc设计」· L 代码 · 共 669 行 · 第 1/2 页

L
669
字号
%{/* Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000   Free Software Foundation, Inc.This file is part of GLD, the Gnu Linker.GLD is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GLD is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GLD; see the file COPYING.  If not, write to the FreeSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA02111-1307, USA.  *//*This was written by steve chamberlain                    sac@cygnus.com*/#include <ansidecl.h>#include <stdio.h>#include <ctype.h>#ifdef MPW/* Prevent enum redefinition problems. */#define TRUE_FALSE_ALREADY_DEFINED#endif /* MPW */#include "bfd.h"#include "sysdep.h"#include "ld.h"#include "ldgram.h"#include "ldmisc.h"#include "ldexp.h"#include "ldlang.h"#include "ldfile.h"#include "ldlex.h"#include "ldmain.h"#include "libiberty.h"/* The type of top-level parser input.   yylex and yyparse (indirectly) both check this.  */input_type parser_input;/* Line number in the current input file.   (FIXME Actually, it doesn't appear to get reset for each file?)  */unsigned int lineno = 1;/* The string we are currently lexing, or NULL if we are reading a   file.  */const char *lex_string = NULL;/* Support for flex reading from more than one input file (stream).   `include_stack' is flex's input state for each open file;   `file_name_stack' is the file names.  `lineno_stack' is the current   line numbers.   If `include_stack_ptr' is 0, we haven't started reading anything yet.   Otherwise, stack elements 0 through `include_stack_ptr - 1' are valid.  */#undef YY_INPUT#define YY_INPUT(buf,result,max_size) yy_input(buf, &result, max_size)#define MAX_INCLUDE_DEPTH 10static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];static const char *file_name_stack[MAX_INCLUDE_DEPTH];static unsigned int lineno_stack[MAX_INCLUDE_DEPTH];static unsigned int include_stack_ptr = 0;static int vers_node_nesting = 0;static YY_BUFFER_STATE yy_create_string_buffer PARAMS ((const char *string,							size_t size));static void yy_input PARAMS ((char *, int *result, int max_size));static void comment PARAMS ((void));static void lex_warn_invalid PARAMS ((char *where, char *what));/* STATES 	EXPRESSION	definitely in an expression	SCRIPT		definitely in a script	BOTH		either EXPRESSION or SCRIPT	DEFSYMEXP	in an argument to -defsym        MRI             in an MRI script	VERS_START	starting a Sun style mapfile	VERS_SCRIPT	a Sun style mapfile	VERS_NODE	a node within a Sun style mapfile*/#define RTOKEN(x)  {  yylval.token = x; return x; }/* Some versions of flex want this.  */#ifndef yywrapint yywrap () { return 1; }#endif%}%a 4000%o 5000CMDFILENAMECHAR   [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~]CMDFILENAMECHAR1  [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\~]FILENAMECHAR1	[_a-zA-Z\/\.\\\$\_\~]SYMBOLCHARN     [_a-zA-Z\/\.\\\$\_\~0-9]FILENAMECHAR	[_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~]WILDCHAR	[_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~\?\*]WHITE		[ \t\n\r]+ NOCFILENAMECHAR	[_a-zA-Z0-9\/\.\-\_\+\$\:\[\]\\\~]V_TAG [.$_a-zA-Z][._a-zA-Z0-9]*V_IDENTIFIER [*?.$_a-zA-Z]([*?.$_a-zA-Z0-9]|::)*%s SCRIPT%s EXPRESSION%s BOTH%s DEFSYMEXP%s MRI%s VERS_START%s VERS_SCRIPT%s VERS_NODE%%  if (parser_input != input_selected)    {      /* The first token of the input determines the initial parser state.  */      input_type t = parser_input;      parser_input = input_selected;      switch (t)	{	case input_script: return INPUT_SCRIPT; break;	case input_mri_script: return INPUT_MRI_SCRIPT; break;	case input_version_script: return INPUT_VERSION_SCRIPT; break;	case input_defsym: return INPUT_DEFSYM; break;	default: abort ();	}    }<BOTH,SCRIPT,EXPRESSION>"/*"	{ comment(); }<DEFSYMEXP>"-"                  { RTOKEN('-');}<DEFSYMEXP>"+"                  { RTOKEN('+');}<DEFSYMEXP>{FILENAMECHAR1}{SYMBOLCHARN}*   { yylval.name = xstrdup(yytext); return NAME; }<DEFSYMEXP>"="                  { RTOKEN('='); }<MRI,EXPRESSION>"$"([0-9A-Fa-f])+ {  				yylval.integer = bfd_scan_vma (yytext+1, 0,16);				return INT;			}<MRI,EXPRESSION>([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) {				   int ibase ;				   switch (yytext[yyleng-1]) {				    case 'X': 				    case 'x':				    case 'H':				    case 'h':				     ibase = 16;				     break;				    case 'O':				    case 'o':				     ibase = 8;				     break;				    case 'B':				    case 'b':				     ibase = 2;				     break;				    default:				     ibase = 10;				   }				   yylval.integer = bfd_scan_vma (yytext, 0,								  ibase);				   return INT;				 }<SCRIPT,DEFSYMEXP,MRI,BOTH,EXPRESSION>((("$"|"0x")([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? {				  char *s = yytext;				  if (*s == '$')				    ++s;				  yylval.integer = bfd_scan_vma (s, 0, 0);				  if (yytext[yyleng-1] == 'M'				      || yytext[yyleng-1] == 'm')				    yylval.integer *= 1024 * 1024;				  if (yytext[yyleng-1] == 'K' 				      || yytext[yyleng-1]=='k')				    yylval.integer *= 1024;				  return INT;				}<BOTH,SCRIPT,EXPRESSION,MRI>"]"		{ RTOKEN(']');}<BOTH,SCRIPT,EXPRESSION,MRI>"["		{ RTOKEN('[');}<BOTH,SCRIPT,EXPRESSION,MRI>"<<="	{ RTOKEN(LSHIFTEQ);}<BOTH,SCRIPT,EXPRESSION,MRI>">>="	{ RTOKEN(RSHIFTEQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"||"	{ RTOKEN(OROR);}<BOTH,SCRIPT,EXPRESSION,MRI>"=="	{ RTOKEN(EQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"!="	{ RTOKEN(NE);}<BOTH,SCRIPT,EXPRESSION,MRI>">="	{ RTOKEN(GE);}<BOTH,SCRIPT,EXPRESSION,MRI>"<="	{ RTOKEN(LE);}<BOTH,SCRIPT,EXPRESSION,MRI>"<<"	{ RTOKEN(LSHIFT);}<BOTH,SCRIPT,EXPRESSION,MRI>">>"	{ RTOKEN(RSHIFT);}<BOTH,SCRIPT,EXPRESSION,MRI>"+="	{ RTOKEN(PLUSEQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"-="	{ RTOKEN(MINUSEQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"*="	{ RTOKEN(MULTEQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"/="	{ RTOKEN(DIVEQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"&="	{ RTOKEN(ANDEQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"|="	{ RTOKEN(OREQ);}<BOTH,SCRIPT,EXPRESSION,MRI>"&&"	{ RTOKEN(ANDAND);}<BOTH,SCRIPT,EXPRESSION,MRI>">"		{ RTOKEN('>');}<BOTH,SCRIPT,EXPRESSION,MRI>","		{ RTOKEN(',');}<BOTH,SCRIPT,EXPRESSION,MRI>"&"		{ RTOKEN('&');}<BOTH,SCRIPT,EXPRESSION,MRI>"|"		{ RTOKEN('|');}<BOTH,SCRIPT,EXPRESSION,MRI>"~"		{ RTOKEN('~');}<BOTH,SCRIPT,EXPRESSION,MRI>"!"		{ RTOKEN('!');}<BOTH,SCRIPT,EXPRESSION,MRI>"?"		{ RTOKEN('?');}<BOTH,SCRIPT,EXPRESSION,MRI>"*"		{ RTOKEN('*');}<BOTH,SCRIPT,EXPRESSION,MRI>"+"		{ RTOKEN('+');}<BOTH,SCRIPT,EXPRESSION,MRI>"-"		{ RTOKEN('-');}<BOTH,SCRIPT,EXPRESSION,MRI>"/"		{ RTOKEN('/');}<BOTH,SCRIPT,EXPRESSION,MRI>"%"		{ RTOKEN('%');}<BOTH,SCRIPT,EXPRESSION,MRI>"<"		{ RTOKEN('<');}<BOTH,SCRIPT,EXPRESSION,MRI>"="          { RTOKEN('=');}<BOTH,SCRIPT,EXPRESSION,MRI>"}"			{ RTOKEN('}') ; }<BOTH,SCRIPT,EXPRESSION,MRI>"{"			{ RTOKEN('{'); }<BOTH,SCRIPT,EXPRESSION,MRI>")"			{ RTOKEN(')');}<BOTH,SCRIPT,EXPRESSION,MRI>"("			{ RTOKEN('(');}<BOTH,SCRIPT,EXPRESSION,MRI>":"		{ RTOKEN(':'); }<BOTH,SCRIPT,EXPRESSION,MRI>";"		{ RTOKEN(';');}<BOTH,SCRIPT>"MEMORY"		{ RTOKEN(MEMORY);}<BOTH,SCRIPT>"ORIGIN"		{ RTOKEN(ORIGIN);}<BOTH,SCRIPT>"VERSION"		{ RTOKEN(VERSIONK);}<EXPRESSION,BOTH,SCRIPT>"BLOCK"		{ RTOKEN(BLOCK);}<EXPRESSION,BOTH,SCRIPT>"BIND"		{ RTOKEN(BIND);}<BOTH,SCRIPT>"LENGTH"		{ RTOKEN(LENGTH);}<EXPRESSION,BOTH,SCRIPT>"ALIGN"			{ RTOKEN(ALIGN_K);}<EXPRESSION,BOTH,SCRIPT>"ADDR"			{ RTOKEN(ADDR);}<EXPRESSION,BOTH,SCRIPT>"LOADADDR"		{ RTOKEN(LOADADDR);}<EXPRESSION,BOTH>"MAX"			{ RTOKEN(MAX_K); }<EXPRESSION,BOTH>"MIN"			{ RTOKEN(MIN_K); }<EXPRESSION,BOTH>"ASSERT"		{ RTOKEN(ASSERT_K); }<BOTH,SCRIPT>"ENTRY"			{ RTOKEN(ENTRY);}<BOTH,SCRIPT,MRI>"EXTERN"		{ RTOKEN(EXTERN);}<EXPRESSION,BOTH,SCRIPT>"NEXT"			{ RTOKEN(NEXT);}<EXPRESSION,BOTH,SCRIPT>"sizeof_headers"	{ RTOKEN(SIZEOF_HEADERS);}<EXPRESSION,BOTH,SCRIPT>"SIZEOF_HEADERS"	{ RTOKEN(SIZEOF_HEADERS);}<BOTH,SCRIPT>"MAP"			{ RTOKEN(MAP);}<EXPRESSION,BOTH,SCRIPT>"SIZEOF"		{ RTOKEN(SIZEOF);}<BOTH,SCRIPT>"TARGET"		{ RTOKEN(TARGET_K);}<BOTH,SCRIPT>"SEARCH_DIR"		{ RTOKEN(SEARCH_DIR);}<BOTH,SCRIPT>"OUTPUT"		{ RTOKEN(OUTPUT);}<BOTH,SCRIPT>"INPUT"			{ RTOKEN(INPUT);}<EXPRESSION,BOTH,SCRIPT>"GROUP"		{ RTOKEN(GROUP);}<EXPRESSION,BOTH,SCRIPT>"DEFINED"		{ RTOKEN(DEFINED);}<BOTH,SCRIPT>"CREATE_OBJECT_SYMBOLS"	{ RTOKEN(CREATE_OBJECT_SYMBOLS);}<BOTH,SCRIPT>"CONSTRUCTORS"		{ RTOKEN( CONSTRUCTORS);}<BOTH,SCRIPT>"FORCE_COMMON_ALLOCATION" { RTOKEN(FORCE_COMMON_ALLOCATION);}<BOTH,SCRIPT>"SECTIONS"		{ RTOKEN(SECTIONS);}<BOTH,SCRIPT>"FILL"			{ RTOKEN(FILL);}<BOTH,SCRIPT>"STARTUP"		{ RTOKEN(STARTUP);}<BOTH,SCRIPT>"OUTPUT_FORMAT"		{ RTOKEN(OUTPUT_FORMAT);}<BOTH,SCRIPT>"OUTPUT_ARCH"		{ RTOKEN( OUTPUT_ARCH);}<BOTH,SCRIPT>"HLL"			{ RTOKEN(HLL);}<BOTH,SCRIPT>"SYSLIB"		{ RTOKEN(SYSLIB);}<BOTH,SCRIPT>"FLOAT"			{ RTOKEN(FLOAT);}<BOTH,SCRIPT>"QUAD"			{ RTOKEN( QUAD);}<BOTH,SCRIPT>"SQUAD"			{ RTOKEN( SQUAD);}<BOTH,SCRIPT>"LONG"			{ RTOKEN( LONG);}<BOTH,SCRIPT>"SHORT"			{ RTOKEN( SHORT);}<BOTH,SCRIPT>"BYTE"			{ RTOKEN( BYTE);}<BOTH,SCRIPT>"NOFLOAT"		{ RTOKEN(NOFLOAT);}<EXPRESSION,BOTH,SCRIPT>"NOCROSSREFS"	{ RTOKEN(NOCROSSREFS);}<BOTH,SCRIPT>"OVERLAY"			{ RTOKEN(OVERLAY); }<BOTH,SCRIPT>"SORT"			{ RTOKEN(SORT); }<EXPRESSION,BOTH,SCRIPT>"NOLOAD"	{ RTOKEN(NOLOAD);}<EXPRESSION,BOTH,SCRIPT>"DSECT"		{ RTOKEN(DSECT);}<EXPRESSION,BOTH,SCRIPT>"COPY"		{ RTOKEN(COPY);}<EXPRESSION,BOTH,SCRIPT>"INFO"		{ RTOKEN(INFO);}<EXPRESSION,BOTH,SCRIPT>"OVERLAY"	{ RTOKEN(OVERLAY);}<BOTH,SCRIPT>"o"			{ RTOKEN(ORIGIN);}<BOTH,SCRIPT>"org"			{ RTOKEN(ORIGIN);}<BOTH,SCRIPT>"l"			{ RTOKEN( LENGTH);}<BOTH,SCRIPT>"len"			{ RTOKEN( LENGTH);}<BOTH,SCRIPT>"INCLUDE"			{ RTOKEN(INCLUDE);}<BOTH,SCRIPT>"PHDRS"			{ RTOKEN (PHDRS); }<EXPRESSION,BOTH,SCRIPT>"AT"			{ RTOKEN(AT);}<EXPRESSION,BOTH,SCRIPT>"PROVIDE"		{ RTOKEN(PROVIDE); }<EXPRESSION,BOTH,SCRIPT>"KEEP"		{ RTOKEN(KEEP); }<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE"        { RTOKEN(EXCLUDE_FILE); }<MRI>"#".*\n?			{ ++ lineno; }<MRI>"\n"	                { ++ lineno;  RTOKEN(NEWLINE); }<MRI>"*".*			{ /* Mri comment line */ }<MRI>";".*			{ /* Mri comment line */ }<MRI>"END"                      { RTOKEN(ENDWORD); }<MRI>"ALIGNMOD"		{ RTOKEN(ALIGNMOD);}<MRI>"ALIGN"		{ RTOKEN(ALIGN_K);}<MRI>"CHIP"                     { RTOKEN(CHIP); }<MRI>"BASE"                     { RTOKEN(BASE); }<MRI>"ALIAS"                     { RTOKEN(ALIAS); }<MRI>"TRUNCATE"                     { RTOKEN(TRUNCATE); }<MRI>"LOAD"                     { RTOKEN(LOAD); }<MRI>"PUBLIC"                   { RTOKEN(PUBLIC); }<MRI>"ORDER"                    { RTOKEN(ORDER); }<MRI>"NAME"                     { RTOKEN(NAMEWORD); }<MRI>"FORMAT"                   { RTOKEN(FORMAT); }<MRI>"CASE"                     { RTOKEN(CASE); }<MRI>"START"                    { RTOKEN(START); }<MRI>"LIST".*                   { RTOKEN(LIST); /* LIST and ignore to end of line */ }<MRI>"SECT"			{ RTOKEN(SECT); }<EXPRESSION,BOTH,SCRIPT,MRI>"ABSOLUTE"			{ RTOKEN(ABSOLUTE); }<MRI>"end"                      { RTOKEN(ENDWORD); }<MRI>"alignmod"		{ RTOKEN(ALIGNMOD);}<MRI>"align"		{ RTOKEN(ALIGN_K);}<MRI>"chip"                     { RTOKEN(CHIP); }<MRI>"base"                     { RTOKEN(BASE); }<MRI>"alias"                     { RTOKEN(ALIAS); }<MRI>"truncate"                     { RTOKEN(TRUNCATE); }<MRI>"load"                     { RTOKEN(LOAD); }<MRI>"public"                   { RTOKEN(PUBLIC); }<MRI>"order"                    { RTOKEN(ORDER); }<MRI>"name"                     { RTOKEN(NAMEWORD); }<MRI>"format"                   { RTOKEN(FORMAT); }<MRI>"case"                     { RTOKEN(CASE); }<MRI>"extern"                   { RTOKEN(EXTERN); }<MRI>"start"                    { RTOKEN(START); }<MRI>"list".*                   { RTOKEN(LIST); /* LIST and ignore to end of line */ }<MRI>"sect"			{ RTOKEN(SECT); }<EXPRESSION,BOTH,SCRIPT,MRI>"absolute"			{ RTOKEN(ABSOLUTE); }<MRI>{FILENAMECHAR1}{NOCFILENAMECHAR}*	{

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?