]> pd.if.org Git - pccts/commitdiff
auto commit for import
authorTerence Parr <>
Tue, 3 Oct 1995 23:32:30 +0000 (18:32 -0500)
committerNathan Wagner <nw@hydaspes.if.org>
Sun, 26 Feb 2017 02:16:51 +0000 (20:16 -0600)
testcpp/3/MyLexer.cpp [new file with mode: 0755]

diff --git a/testcpp/3/MyLexer.cpp b/testcpp/3/MyLexer.cpp
new file mode 100755 (executable)
index 0000000..c448e08
--- /dev/null
@@ -0,0 +1,76 @@
+/* MyTokenBuffer.c */
+/* Sample replacement for DLGLexer */
+/* Shows how to override DLG with your own lexer */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <iostream.h>
+
+#include "config.h"                                    /* include token defs */
+#include "mytokens.h"                          /* include token defs */
+#include APARSER_H                                     /* include all the ANTLR yuck */
+#include "MyLexer.h"                           /* define your lexer */
+typedef ANTLRCommonToken ANTLRToken;/* use a predefined Token class */
+
+void panic(char *s) {
+   cerr << s << '\n';
+   exit(5);
+}
+
+MyLexer::MyLexer()
+{
+       c = getchar();
+}
+
+/* Recognizes Tokens IDENTIFIER and NUMBER */
+ANTLRAbstractToken *MyLexer::
+getToken()
+{
+       /* we will return a pointer to this next guy */
+       ANTLRToken *resultToken = new ANTLRToken;
+
+       ANTLRChar TokenBuffer[100];
+                                               /* This routine will just crash if tokens become
+                           more than 99 chars; your code must of course
+                                                  gracefully recover/adapt */
+   int  index=0;
+
+   while ( c==' ' || c=='\n' ) c=getchar();
+
+   if (c==EOF) {resultToken->setType(Eof); return resultToken;}
+
+   if (isdigit(c)) {
+      /* Looks like we have ourselves a number token */
+      while (isdigit(c)) {
+         TokenBuffer[index++]=c;
+                c = getchar();
+         }
+      TokenBuffer[index]='\0';
+      
+      resultToken->setType(NUMBER);
+      resultToken->setText(TokenBuffer); /* not exactly swift, unfortunately... */
+
+      return resultToken;
+   }
+   
+   if (isalpha(c)) {
+      /* We have ourselves an IDENTIFIER token */
+      while (isalpha(c)) {
+         TokenBuffer[index++]=c;
+                c = getchar();
+         }
+      TokenBuffer[index]='\0';
+
+      resultToken->setType(IDENTIFIER);
+      resultToken->setText(TokenBuffer); /* not exactly swift, unfortunately... */
+
+      return resultToken;
+   }
+
+   else
+      panic("lexer error");
+
+   return NULL;
+}
+