summaryrefslogtreecommitdiff
path: root/APACHE_1_3_42/src/test/rename/csubst/lexer.l
diff options
context:
space:
mode:
authorColm MacCarthaigh <colm@apache.org>2010-01-08 11:45:43 +0000
committerColm MacCarthaigh <colm@apache.org>2010-01-08 11:45:43 +0000
commit396931c93e46f5d130f0df7044a9c0e63fd12ebd (patch)
tree9ff5247f604985caa9581ebe4bfa6aa5164db5ce /APACHE_1_3_42/src/test/rename/csubst/lexer.l
parent7d344b579813528064a6711a91f675b7f47e4926 (diff)
downloadhttpd-800595eceb63d691618214f91844d445062422e2.tar.gz
Tag 1.3.421.3
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/tags/1.3@897175 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'APACHE_1_3_42/src/test/rename/csubst/lexer.l')
-rw-r--r--APACHE_1_3_42/src/test/rename/csubst/lexer.l226
1 files changed, 226 insertions, 0 deletions
diff --git a/APACHE_1_3_42/src/test/rename/csubst/lexer.l b/APACHE_1_3_42/src/test/rename/csubst/lexer.l
new file mode 100644
index 0000000000..83f91ddfb8
--- /dev/null
+++ b/APACHE_1_3_42/src/test/rename/csubst/lexer.l
@@ -0,0 +1,226 @@
+
+Digit [0-9]
+Literal [a-zA-Z_]
+Hex [a-fA-F0-9]
+Exp [Ee][+-]?{Digit}+
+FS (f|F|l|L)
+IS (u|U|l|L)+
+
+%{
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "util.h"
+#include "tokens.h"
+
+extern int opt_directives;
+
+static void string(void);
+static void comment(void);
+static int directive(void);
+
+static int yywrap(void) { return 1; }
+%}
+
+%%
+
+"/*" { comment(); return COMMENT; }
+"#" { return directive(); }
+
+"auto" { return KEYWORD; }
+"break" { return KEYWORD; }
+"case" { return KEYWORD; }
+"char" { return KEYWORD; }
+"const" { return KEYWORD; }
+"continue" { return KEYWORD; }
+"default" { return KEYWORD; }
+"do" { return KEYWORD; }
+"double" { return KEYWORD; }
+"else" { return KEYWORD; }
+"enum" { return KEYWORD; }
+"extern" { return KEYWORD; }
+"float" { return KEYWORD; }
+"for" { return KEYWORD; }
+"goto" { return KEYWORD; }
+"if" { return KEYWORD; }
+"int" { return KEYWORD; }
+"long" { return KEYWORD; }
+"register" { return KEYWORD; }
+"return" { return KEYWORD; }
+"short" { return KEYWORD; }
+"signed" { return KEYWORD; }
+"sizeof" { return KEYWORD; }
+"static" { return KEYWORD; }
+"struct" { return KEYWORD; }
+"switch" { return KEYWORD; }
+"typedef" { return KEYWORD; }
+"union" { return KEYWORD; }
+"unsigned" { return KEYWORD; }
+"void" { return KEYWORD; }
+"volatile" { return KEYWORD; }
+"while" { return KEYWORD; }
+
+{Literal}({Literal}|{Digit})* { return IDENTIFIER; }
+
+0[xX]{Hex}+{IS}? { return CONSTANT; }
+0{Digit}+{IS}? { return CONSTANT; }
+{Digit}+{IS} { return CONSTANT; }
+{Digit}+ { return CONSTANT; }
+'(\\.|[^\\'])+' { return CHARACTER; }
+
+{Digit}+{Exp}{FS}? { return CONSTANT; }
+{Digit}*"."{Digit}+({Exp})?{FS}? { return CONSTANT; }
+{Digit}+"."{Digit}*({Exp})?{FS}? { return CONSTANT; }
+
+"\"" { string(); return STRING; }
+
+">>=" { return OPERATOR; }
+"<<=" { return OPERATOR; }
+"+=" { return OPERATOR; }
+"-=" { return OPERATOR; }
+"*=" { return OPERATOR; }
+"/=" { return OPERATOR; }
+"%=" { return OPERATOR; }
+"&=" { return OPERATOR; }
+"^=" { return OPERATOR; }
+"|=" { return OPERATOR; }
+">>" { return OPERATOR; }
+"<<" { return OPERATOR; }
+"++" { return OPERATOR; }
+"--" { return OPERATOR; }
+"->" { return OPERATOR; }
+"&&" { return OPERATOR; }
+"||" { return OPERATOR; }
+"<=" { return OPERATOR; }
+">=" { return OPERATOR; }
+"==" { return OPERATOR; }
+"!=" { return OPERATOR; }
+"..." { return ELLIPSIS; }
+";" { return ';'; }
+"{" { return '{'; }
+"}" { return '}'; }
+"," { return ','; }
+":" { return ':'; }
+"=" { return '='; }
+"(" { return '('; }
+")" { return ')'; }
+"[" { return '['; }
+"]" { return ']'; }
+"." { return '.'; }
+"&" { return '&'; }
+"!" { return '!'; }
+"~" { return '~'; }
+"-" { return '-'; }
+"+" { return '+'; }
+"*" { return '*'; }
+"/" { return '/'; }
+"%" { return '%'; }
+"<" { return '<'; }
+">" { return '>'; }
+"^" { return '^'; }
+"|" { return '|'; }
+"?" { return '?'; }
+
+[ \t\v\n\f] { return yytext[0]; }
+. { return yytext[0]; }
+
+%%
+
+char *token_buffer;
+
+static int maxtoken;
+
+void
+init_lex(void)
+{
+ maxtoken = 40;
+ token_buffer = (char *)xmalloc(maxtoken + 1);
+}
+
+void
+done_lex(void)
+{
+ free(token_buffer);
+}
+
+static char *
+extend_token_buffer(char *p)
+{
+ int offset = p - token_buffer;
+
+ maxtoken = maxtoken * 2 + 10;
+
+ token_buffer = (char *)xrealloc(token_buffer, maxtoken + 2);
+
+ return token_buffer + offset;
+}
+
+static void
+string(void)
+{
+ char *p;
+ int c;
+
+ p = token_buffer;
+ *p++ = '"';
+ while ((c = input()) != EOF && c != '"') {
+ if (p >= token_buffer + maxtoken)
+ p = extend_token_buffer(p);
+ *p++ = c;
+ if (c == '\\')
+ *p++ = input();
+ }
+ if (c == EOF)
+ errx(1, "unexpected end of file in string");
+ *p++ = '"';
+ *p = '\0';
+}
+
+static void
+comment(void)
+{
+ char *p;
+ int c;
+
+ p = token_buffer;
+ *p++ = '/';
+ *p++ = '*';
+ while ((c = input()) != EOF) {
+resync: if (p >= token_buffer + maxtoken)
+ p = extend_token_buffer(p);
+ *p++ = c;
+ if (c == '*')
+ if ((c = input()) == '/') {
+ *p++ = c;
+ *p = '\0';
+ return;
+ } else
+ goto resync;
+ }
+ *p = '\0';
+}
+
+static int
+directive(void)
+{
+ char *p;
+ int c;
+
+ if (opt_directives)
+ return '#';
+
+ p = token_buffer;
+ *p++ = '#';
+
+ while ((c = input()) != EOF && c != '\n') {
+ if (p >= token_buffer + maxtoken)
+ p = extend_token_buffer(p);
+ *p++ = c;
+ if (c == '\\')
+ *p++ = input();
+ }
+ *p++ = c;
+ *p = '\0';
+ return DIRECTIVE;
+}