⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 我作编译原理课程设计时写的一个图形化的小型开发环境
💻 CPP
字号:
#include <stdio.h>
#include <iostream>
#include "lex.h"
#include "lexsymb.h"
using namespace std;
// 定义保留字
char *name[] = {
   "IF", "ELSE", "PRINT", "INPUT", "ASSIGN", "EQUAL",
   "CONCAT", "END_STMT", "OPEN_PAR", "CLOSE_PAR", "BEGIN_CS", "END_CS",
   "ID", "STRING",
};

YYSTYPE yylval; // union in which strings are passed

// 这个功能将在文件的结尾被lexer调用,
//  (你可以重置指针yyin(the input FILE*) 返回0,如果你要再处理另一个 
// 文件,否则只返回1 
extern "C" int yywrap(void) {
  return 1;
}

//主函数: 只记录所有找到的Tokens 
main (int argc, char *argv[])  {
   int token;

   // Set the input stream (either a file from the command line or stdin)
   yyin = NULL;
   if (argc == 2)   {
      yyin = fopen (argv[1], "rt");
   }
   if (yyin == NULL)
      yyin = stdin;

   // 处理所有的tokens并显示 
   while ((token = yylex ()) != 0)   {
      cout << "Token: ";
      switch (token)   {
      case ID://关键字 
	      cout << name[token-IF] << " = " << yylval.str << endl;
		   delete [] yylval.str;
		   break;
      case STRING://字符串 
	      cout << name[token-IF] << " = \"" << yylval.str << "\"" << endl;
		   delete [] yylval.str;
		   break;
      case ERROR_TOKEN://非法输入 
	      cout << "ILLEGAL TOKEN" << endl;
		   break;
      default:
	      cout << name[token-IF] << endl;
         break;
	   }
   }
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -