1 /*===- ConfigLexer.l - Scanner for CompilerDriver Config Files -*- C++ -*--===//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by Reid Spencer and is distributed under the
6 // University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements the flex scanner for configuration files for the
11 // llvmc CompilerDriver.
13 //===----------------------------------------------------------------------===*/
16 %option prefix="Config"
19 %option never-interactive
24 %option outfile="ConfigLexer.cpp"
32 #include "ConfigLexer.h"
34 #define YY_INPUT(buf,result,max_size) \
36 assert(ConfigLexerInput != 0 && "Oops"); \
37 result = ConfigLexerInput->read(buf,max_size); \
38 if (result == 0 ) result = YY_NULL; \
41 #define YY_DECL ConfigLexerTokens llvm::Configlex()
43 #define yyterminate() { return EOFTOK; }
47 /* Conversion of text ints to binary */
48 static int64_t IntToVal(const char *Buffer) {
50 for (; *Buffer; Buffer++) {
51 int64_t OldRes = Result;
53 Result += *Buffer-'0';
58 bool in_value = false;
63 PREPROCESSOR preprocessor|PreProcessor|PREPROCESSOR
64 TRANSLATOR translator|Translator|TRANSLATOR
65 OPTIMIZER optimizer|Optimizer|OPTIMIZER
66 ASSEMBLER assembler|Assembler|ASSEMBLER
67 LINKER linker|Linker|LINKER
69 REQUIRED required|Required|REQUIRED
70 COMMAND command|Command|COMMAND
71 PREPROCESSES preprocesses|PreProcesses|PREPROCESSES
72 GROKS_DASH_O groks_dash_O|Groks_Dash_O|GROKS_DASH_O
73 GROKS_O10N groks_optimization|Groks_Optimization|GROKS_OPTIMIZATION
74 OPTIMIZES optimizes|Optimizes|OPTIMIZES
83 Option [-A-Za-z0-9_:%+/\\|,]*
89 False false|False|FALSE
97 {NewLine} { in_value = false; return EOLTOK; }
98 {Eq} { in_value = true; return EQUALS; }
99 {Comment} { /* Ignore comments */ }
100 {White} { /* Ignore whitespace */ }
102 {LANG} { if (in_value) { ConfigLexerData.StringVal = "lang";
103 return OPTION; } else return LANG; }
104 {PREPROCESSOR} { if (in_value) { ConfigLexerData.StringVal = "preprocessor";
105 return OPTION; } else return PREPROCESSOR; }
106 {TRANSLATOR} { if (in_value) { ConfigLexerData.StringVal = "translator";
107 return OPTION; } else return TRANSLATOR; }
108 {OPTIMIZER} { if (in_value) { ConfigLexerData.StringVal = "optimizer";
109 return OPTION; } else return OPTIMIZER; }
110 {ASSEMBLER} { if (in_value) { ConfigLexerData.StringVal = "assembler";
111 return OPTION; } else return ASSEMBLER; }
112 {LINKER} { if (in_value) { ConfigLexerData.StringVal = "linker";
113 return OPTION; } else return LINKER; }
114 {NAME} { if (in_value) { ConfigLexerData.StringVal = "name";
115 return OPTION; } else return NAME; }
116 {REQUIRED} { if (in_value) { ConfigLexerData.StringVal = "required";
117 return OPTION; } else return REQUIRED; }
118 {COMMAND} { if (in_value) { ConfigLexerData.StringVal = "command";
119 return OPTION; } else return COMMAND; }
120 {PREPROCESSES} { if (in_value) { ConfigLexerData.StringVal = "preprocesses";
121 return OPTION; } else return PREPROCESSES; }
122 {GROKS_DASH_O} { if (in_value) { ConfigLexerData.StringVal = "groks_dash_O";
123 return OPTION; } else return GROKS_DASH_O; }
124 {GROKS_O10N} { if (in_value) { ConfigLexerData.StringVal =
125 "groks_optimization"; return OPTION; }
126 else return GROKS_O10N; }
127 {OPTIMIZES} { if (in_value) { ConfigLexerData.StringVal = "optimizes";
128 return OPTION; } else return OPTIMIZES; }
129 {OPT1} { if (in_value) { ConfigLexerData.StringVal = "opt1";
130 return OPTION; } else return OPT1; }
131 {OPT2} { if (in_value) { ConfigLexerData.StringVal = "opt2";
132 return OPTION; } else return OPT2; }
133 {OPT3} { if (in_value) { ConfigLexerData.StringVal = "opt3";
134 return OPTION; } else return OPT3; }
135 {OPT4} { if (in_value) { ConfigLexerData.StringVal = "opt4";
136 return OPTION; } else return OPT4; }
137 {OPT5} { if (in_value) { ConfigLexerData.StringVal = "opt5";
138 return OPTION; } else return OPT5; }
139 @in@ { if (in_value) return IN_SUBST; else return ERRORTOK; }
140 @out@ { if (in_value) return OUT_SUBST; else return ERRORTOK; }
141 {True} { if (in_value) return TRUETOK; else return ERRORTOK; }
142 {On} { if (in_value) return TRUETOK; else return ERRORTOK; }
143 {Yes} { if (in_value) return TRUETOK; else return ERRORTOK; }
144 {False} { if (in_value) return FALSETOK; else return ERRORTOK; }
145 {Off} { if (in_value) return FALSETOK; else return ERRORTOK; }
146 {No} { if (in_value) return FALSETOK; else return ERRORTOK; }
148 {Option} { ConfigLexerData.StringVal = yytext; return OPTION; }
149 {Integer} { ConfigLexerData.IntegerVal = IntToVal(yytext); return INTEGER; }
150 {String} { yytext[yyleng-1] = 0; // nuke end quote
151 ConfigLexerData.StringVal = yytext+1; // Nuke start quote
154 {Sep} { if (in_value) { ConfigLexerData.StringVal = yytext;