From 1828ee191c6686309921f5b37a3e74ce8ecb795c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 14 Feb 2006 05:16:35 +0000 Subject: [PATCH] Adjust to new style "generated files in CVS" mechanism for lex output git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26163 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../{ConfigLexer.cpp => ConfigLexer.cpp.cvs} | 0 tools/llvmc/ConfigLexer.l.cvs | 201 ++++++++++++++++++ 2 files changed, 201 insertions(+) rename tools/llvmc/{ConfigLexer.cpp => ConfigLexer.cpp.cvs} (100%) create mode 100644 tools/llvmc/ConfigLexer.l.cvs diff --git a/tools/llvmc/ConfigLexer.cpp b/tools/llvmc/ConfigLexer.cpp.cvs similarity index 100% rename from tools/llvmc/ConfigLexer.cpp rename to tools/llvmc/ConfigLexer.cpp.cvs diff --git a/tools/llvmc/ConfigLexer.l.cvs b/tools/llvmc/ConfigLexer.l.cvs new file mode 100644 index 00000000000..ca21f4f64d2 --- /dev/null +++ b/tools/llvmc/ConfigLexer.l.cvs @@ -0,0 +1,201 @@ +/*===- ConfigLexer.l - Scanner for CompilerDriver Config Files -*- C++ -*--===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Reid Spencer and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the flex scanner for configuration files for the +// llvmc CompilerDriver. +// +//===----------------------------------------------------------------------===*/ + + +%option prefix="Config" +%option nostdinit +%option never-interactive +%option batch +%option noyywrap +%option 8bit +%option outfile="ConfigLexer.cpp" +%option ecs +%option noyymore +%option noreject +%pointer + +%{ + +#include "ConfigLexer.h" + +#define YY_INPUT(buf,result,max_size) \ + { \ + assert(ConfigLexerInput != 0 && "Oops"); \ + result = ConfigLexerInput->read(buf,max_size); \ + if (result == 0 ) result = YY_NULL; \ + } + +#define YY_FATAL_ERROR(msg) \ + { \ + assert(ConfigLexerInput != 0 && "Oops"); \ + ConfigLexerInput->error(msg); \ + } + +#define YY_DECL ConfigLexerTokens llvm::Configlex() + +#define yyterminate() { return EOFTOK; } + +using namespace llvm; + +inline llvm::ConfigLexerTokens +handleNameContext(llvm::ConfigLexerTokens token) { + ConfigLexerState.StringVal = yytext; + if (ConfigLexerState.in_value) + return OPTION; + return token; +} + +inline llvm::ConfigLexerTokens +handleSubstitution(llvm::ConfigLexerTokens token) { + if (ConfigLexerState.in_value) { + ConfigLexerState.StringVal = yytext; + return token; + } + YY_FATAL_ERROR("Substitition tokens not allowed in names" ); + return ERRORTOK; +}; + +inline llvm::ConfigLexerTokens handleValueContext(llvm::ConfigLexerTokens token) { + ConfigLexerState.StringVal = yytext; + if (ConfigLexerState.in_value) + return token; + return OPTION; +} + +%} + +ASSEMBLER assembler|Assembler|ASSEMBLER +COMMAND command|Command|COMMAND +LANG lang|Lang|LANG +LIBS libs|Libs|LIBS +LINKER linker|Linker|LINKER +NAME name|Name|NAME +OPT1 opt1|Opt1|OPT1 +OPT2 opt2|Opt2|OPT2 +OPT3 opt3|Opt3|OPT3 +OPT4 opt4|Opt4|OPT4 +OPT5 opt5|Opt5|OPT5 +OPTIMIZER optimizer|Optimizer|OPTIMIZER +OUTPUT output|Output|OUTPUT +PREPROCESSES preprocesses|PreProcesses|PREPROCESSES +PREPROCESSOR preprocessor|PreProcessor|PREPROCESSOR +REQUIRED required|Required|REQUIRED +TRANSLATES translates|Translates|TRANSLATES +TRANSLATOR translator|Translator|TRANSLATOR +VERSION version|Version|VERSION + +True true|True|TRUE|on|On|ON|yes|Yes|YES +False false|False|FALSE|off|Off|OFF|no|No|NO +Bytecode bc|BC|bytecode|Bytecode|BYTECODE +Assembly asm|ASM|assembly|Assembly|ASSEMBLY + +BadSubst \%[a-zA-Z]*\% +Comment \#[^\r\n]*\r?\n +NewLine \r?\n +Eq \= +EscNewLine \\\r?\n +Option [-A-Za-z0-9_:%+/\\|,][-A-Za-z0-9_:+/\\|,@]* +Sep \. +String \"[^\"]*\" +White [ \t]* + + +%% + +{White} { if (ConfigLexerState.in_value) return SPACE; } + +{Comment} { /* Ignore comments */ + ConfigLexerState.in_value = false; + ConfigLexerState.lineNum++; + return EOLTOK; + } + +{EscNewLine} { ConfigLexerState.lineNum++; + /* Don't return EOLTOK! */ + } + +{NewLine} { ConfigLexerState.in_value = false; + ConfigLexerState.lineNum++; + return EOLTOK; + } + +{Eq} { ConfigLexerState.in_value = true; + return EQUALS; + } + +{Sep} { return SEPARATOR; } + +{VERSION} { return handleNameContext(VERSION_TOK); } + +{LANG} { return handleNameContext(LANG); } +{LIBS} { return handleNameContext(LIBS); } +{NAME} { return handleNameContext(NAME); } +{OPT1} { return handleNameContext(OPT1); } +{OPT2} { return handleNameContext(OPT2); } +{OPT3} { return handleNameContext(OPT3); } +{OPT4} { return handleNameContext(OPT4); } +{OPT5} { return handleNameContext(OPT5); } + +{PREPROCESSOR} { return handleNameContext(PREPROCESSOR); } +{COMMAND} { return handleNameContext(COMMAND); } +{REQUIRED} { return handleNameContext(REQUIRED); } + +{TRANSLATOR} { return handleNameContext(TRANSLATOR); } +{PREPROCESSES} { return handleNameContext(PREPROCESSES); } +{OUTPUT} { return handleNameContext(OUTPUT); } + +{OPTIMIZER} { return handleNameContext(OPTIMIZER); } +{TRANSLATES} { return handleNameContext(TRANSLATES); } + +{ASSEMBLER} { return handleNameContext(ASSEMBLER); } + +{LINKER} { return handleNameContext(LINKER); } + +%args% { return handleSubstitution(ARGS_SUBST); } +%bindir% { return handleSubstitution(BINDIR_SUBST); } +%defs% { return handleSubstitution(DEFS_SUBST); } +%in% { return handleSubstitution(IN_SUBST); } +%incls% { return handleSubstitution(INCLS_SUBST); } +%libdir% { return handleSubstitution(LIBDIR_SUBST); } +%libs% { return handleSubstitution(LIBS_SUBST); } +%llvmgccdir% { return handleSubstitution(LLVMGCCDIR_SUBST); } +%llvmgccarch% { return handleSubstitution(LLVMGCCARCH_SUBST); } +%llvmgcc% { return handleSubstitution(LLVMGCC_SUBST); } +%llvmgxx% { return handleSubstitution(LLVMGXX_SUBST); } +%llvmcc1% { return handleSubstitution(LLVMCC1_SUBST); } +%llvmcc1plus% { return handleSubstitution(LLVMCC1PLUS_SUBST); } +%opt% { return handleSubstitution(OPT_SUBST); } +%out% { return handleSubstitution(OUT_SUBST); } +%stats% { return handleSubstitution(STATS_SUBST); } +%target% { return handleSubstitution(TARGET_SUBST); } +%time% { return handleSubstitution(TIME_SUBST); } +%verbose% { return handleSubstitution(VERBOSE_SUBST); } +%fOpts% { return handleSubstitution(FOPTS_SUBST); } +%MOpts% { return handleSubstitution(MOPTS_SUBST); } +%WOpts% { return handleSubstitution(WOPTS_SUBST); } + +{Assembly} { return handleValueContext(ASSEMBLY); } +{Bytecode} { return handleValueContext(BYTECODE); } +{True} { return handleValueContext(TRUETOK); } +{False} { return handleValueContext(FALSETOK); } + +{Option} { ConfigLexerState.StringVal = yytext; return OPTION; } +{String} { ConfigLexerState.StringVal = yytext+1; // Nuke start quote + ConfigLexerState.StringVal.erase( + --ConfigLexerState.StringVal.end()); + return STRING; + } +{BadSubst} { YY_FATAL_ERROR("Invalid substitution token"); } + +%%