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

📄 atom.cpp

📁 a LALR(1) grammar for C
💻 CPP
字号:
/*****************************************************
File: ATOM.CPP       Copyright 1989 by John M. Dlugosz
   store strings
*****************************************************/

#include "usual.hpp"
#include "atom.hpp"

extern "C" void* malloc (unsigned size);
extern "C" void free (void*);
extern "C" void* realloc (void*, unsigned);

atom_storage atoms(16);

/* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */

atom_storage::atom_storage (int size)
{
count= 0;
capacity= size;
list= (char**) malloc (size * sizeof(char*));
}

/* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */

atom_storage::~atom_storage()
{
free (list);
}

/* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */

extern "C" int strcmp(char*,char*);
extern "C" char* strdup(char*);

atom atom_storage::operator[] (char* s)
{
for (int loop= 0;  loop < count;  loop++) {
   if (!strcmp(s, list[loop])) return loop;  //found it
   }
if (count == capacity) {  // make it bigger
   capacity += capacity/2;
   list= (char**)realloc(list,capacity*sizeof(char*));
   }
list[count]= strdup(s);
return count++;
}

/* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */

⌨️ 快捷键说明

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