o.write(ctime(&now), 24);
}
o << " */\n";
- //TODO: o << headerFileInfo;
+ o << headerFileInfo;
+ o << "\n";
+ // now the type(s)
o << indent(ind++) << "enum " << mapCodeName["YYCONDTYPE"] << " {\n";
for(RegExpMap::const_iterator it = specMap.begin(); it != specMap.end(); ++it)
{
extern file_info sourceFileInfo;
extern file_info outputFileInfo;
+extern file_info headerFileInfo;
extern bool bFlag;
extern bool cFlag;
file_info sourceFileInfo;
file_info outputFileInfo;
+file_info headerFileInfo;
bool bFlag = false;
bool cFlag = false;
cerr << "re2c: error: cannot open " << headerFileName << "\n";
return 1;
}
+ headerFileInfo = file_info(headerFileName, &header);
}
Scanner scanner(source, output);
sourceFileInfo = file_info(sourceFileName, &scanner);
rm $headers
if ${diff} ${x%.re}.h $typname > $typdiff; then
echo "Passed header test."
+ rm $typname
else
echo "Failed: ${x%.re}.h ${x%.re}.h.temp differ."
result=1
--- /dev/null
+/* Generated by re2c */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define BSIZE 8192
+
+typedef struct Scanner
+{
+ FILE *fp;
+ unsigned char *cur, *tok, *lim, *eof;
+ unsigned char buffer[BSIZE];
+} Scanner;
+
+int fill(Scanner *s, int len)
+{
+ if (!len)
+ {
+ s->cur = s->tok = s->lim = s->buffer;
+ s->eof = 0;
+ }
+ if (!s->eof)
+ {
+ int got, cnt = s->tok - s->buffer;
+
+ if (cnt > 0)
+ {
+ memcpy(s->buffer, s->tok, s->lim - s->tok);
+ s->tok -= cnt;
+ s->cur -= cnt;
+ s->lim -= cnt;
+ }
+ cnt = BSIZE - cnt;
+ if ((got = fread(s->lim, 1, cnt, s->fp)) != cnt)
+ {
+ s->eof = &s->lim[got];
+ }
+ s->lim += got;
+ }
+ else if (s->cur + len > s->eof)
+ {
+ return 0; /* not enough input data */
+ }
+ return -1;
+}
+
+char scan(Scanner *s)
+{
+ int state = 1;
+
+ fill(s, 0);
+
+ for(;;)
+ {
+ s->tok = s->cur;
+
+ {
+ unsigned char yych;
+ static void *yyctable[2] = {
+ &&yyc_comment,
+ &&yyc_normal,
+ };
+ goto *yyctable[state];
+/* *********************************** */
+yyc_comment:
+
+ if((s->lim - s->cur) < 2) { if(fill(s, 2) >= 0) break; };
+ yych = *s->cur;
+ if(yych != '*') goto yy4;
+ ++s->cur;
+ if((yych = *s->cur) == '/') goto yy5;
+yy3:
+ {
+ goto yyc_comment;
+ }
+yy4:
+ yych = *++s->cur;
+ goto yy3;
+yy5:
+ ++s->cur;
+ {
+ continue;
+ }
+/* *********************************** */
+yyc_normal:
+ if((s->lim - s->cur) < 2) { if(fill(s, 2) >= 0) break; };
+ yych = *s->cur;
+ if(yych != '/') goto yy11;
+ ++s->cur;
+ if((yych = *s->cur) == '*') goto yy12;
+yy10:
+ {
+ fputc(*s->tok, stdout);
+ continue;
+ }
+yy11:
+ yych = *++s->cur;
+ goto yy10;
+yy12:
+ ++s->cur;
+ {
+ goto yyc_comment;
+ }
+ }
+
+ }
+}
+
+int main(int argc, char **argv)
+{
+ Scanner in;
+ char c;
+
+ if (argc != 2)
+ {
+ fprintf(stderr, "%s <file>\n", argv[0]);
+ return 1;;
+ }
+
+ memset((char*) &in, 0, sizeof(in));
+
+ if (!strcmp(argv[1], "-"))
+ {
+ in.fp = stdin;
+ }
+ else if ((in.fp = fopen(argv[1], "r")) == NULL)
+ {
+ fprintf(stderr, "Cannot open file '%s'\n", argv[1]);
+ return 1;
+ }
+
+ scan(&in);
+
+ if (in.fp != stdin)
+ {
+ fclose(in.fp);
+ }
+ return 0;
+}
--- /dev/null
+/* Generated by re2c */
+
+enum YYCONDTYPE {
+ comment,
+ normal,
+}
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define BSIZE 8192
+
+typedef struct Scanner
+{
+ FILE *fp;
+ unsigned char *cur, *tok, *lim, *eof;
+ unsigned char buffer[BSIZE];
+} Scanner;
+
+int fill(Scanner *s, int len)
+{
+ if (!len)
+ {
+ s->cur = s->tok = s->lim = s->buffer;
+ s->eof = 0;
+ }
+ if (!s->eof)
+ {
+ int got, cnt = s->tok - s->buffer;
+
+ if (cnt > 0)
+ {
+ memcpy(s->buffer, s->tok, s->lim - s->tok);
+ s->tok -= cnt;
+ s->cur -= cnt;
+ s->lim -= cnt;
+ }
+ cnt = BSIZE - cnt;
+ if ((got = fread(s->lim, 1, cnt, s->fp)) != cnt)
+ {
+ s->eof = &s->lim[got];
+ }
+ s->lim += got;
+ }
+ else if (s->cur + len > s->eof)
+ {
+ return 0; /* not enough input data */
+ }
+ return -1;
+}
+
+char scan(Scanner *s)
+{
+ int state = 1;
+
+ fill(s, 0);
+
+ for(;;)
+ {
+ s->tok = s->cur;
+/*!re2c
+
+re2c:define:YYCTYPE = "unsigned char";
+re2c:define:YYCURSOR = s->cur;
+re2c:define:YYLIMIT = s->lim;
+re2c:define:YYMARKER = s->ptr;
+re2c:define:YYFILL = "{ if(fill(s, 2) >= 0) break; }";
+re2c:define:YYCONDITION = state;
+re2c:yyfill:parameter = 0;
+re2c:indent:top = 2;
+
+<normal> "/*"
+ {
+ goto yyc_comment;
+ }
+<normal> [^]
+ {
+ fputc(*s->tok, stdout);
+ continue;
+ }
+<comment> "*" "/"
+ {
+ continue;
+ }
+<comment> [^]
+ {
+ goto yyc_comment;
+ }
+
+*/
+ }
+}
+
+int main(int argc, char **argv)
+{
+ Scanner in;
+ char c;
+
+ if (argc != 2)
+ {
+ fprintf(stderr, "%s <file>\n", argv[0]);
+ return 1;;
+ }
+
+ memset((char*) &in, 0, sizeof(in));
+
+ if (!strcmp(argv[1], "-"))
+ {
+ in.fp = stdin;
+ }
+ else if ((in.fp = fopen(argv[1], "r")) == NULL)
+ {
+ fprintf(stderr, "Cannot open file '%s'\n", argv[1]);
+ return 1;
+ }
+
+ scan(&in);
+
+ if (in.fp != stdin)
+ {
+ fclose(in.fp);
+ }
+ return 0;
+}
/* Generated by re2c */
+#line 3 "condition_05.cgt.h"
+
enum YYCONDTYPE {
comment,
normal,