mylexer.cpp
来自「本工具提供一个词法分析器和语法分析器的集成开发环境」· C++ 代码 · 共 77 行
CPP
77 行
/* 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;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?