From 508a3a0db65f458fd794731bcca05efb4cfdc1da Mon Sep 17 00:00:00 2001 From: Terence Parr <> Date: Tue, 3 Oct 1995 18:32:30 -0500 Subject: [PATCH] auto commit for import --- testcpp/3/MyLexer.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100755 testcpp/3/MyLexer.cpp diff --git a/testcpp/3/MyLexer.cpp b/testcpp/3/MyLexer.cpp new file mode 100755 index 0000000..c448e08 --- /dev/null +++ b/testcpp/3/MyLexer.cpp @@ -0,0 +1,76 @@ +/* MyTokenBuffer.c */ +/* Sample replacement for DLGLexer */ +/* Shows how to override DLG with your own lexer */ + +#include +#include +#include +#include + +#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; +} + -- 2.40.0