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 + -
显示快捷键?