?? wordanalyse.cpp
字號(hào):
#include "wordAnalyse.h"
#include <iostream>
#include <algorithm>
using namespace std;
namespace cmm
{
const int NUM=9, MARK=10, KEYWORD=1, SYMBOL=10;
string kw[]={"if","else","while","read","write","int","real"};
vector<string> key_words(kw,kw+7);
string sb[]={"+","-","==","<>","*","/","=","<","==","(",")",";","{","}","/*","*/","[","]"};
vector<string> symbols(sb,sb+17);
int is_keyWord(string s) // 是否保留字
{
vector<string>::iterator i=find(key_words.begin(), key_words.end(), s);
if (i==key_words.end()) return -1;
else return (i-key_words.begin()); // 保留字的序號(hào)
}
int is_symbol(string s) // 是否特殊符號(hào)
{
vector<string>::iterator i=find(symbols.begin(), symbols.end(), s);
if (i==symbols.end()) return -1;
else return (i-symbols.begin()); // 保留字的序號(hào)
}
int is_number(string s) // 是否數(shù)字
{
bool has_a_point=false;
for(string::iterator i=s.begin(); i!=s.end(); ++i)
{
if (*i<'0' || *i>'9') return -1; // 非數(shù)字
if (*i=='.')
{
if (has_a_point) return -1; //已有小數(shù)點(diǎn)
else has_a_point=true;
}
}
return 0; // 是數(shù)字
}
int is_mark(string s) // 是否標(biāo)識(shí)符
{
for(string::iterator i=s.begin(); i!=s.end(); ++i)
if ( (*i<'a' || *i>'z') && (*i<'A' || *i>'Z') && (*i!='_') ) return false;//非字母數(shù)字下劃線字符
if ( !(*s.begin()<'0' || *s.begin()>'9') ) return -1; // 數(shù)字開頭
if (*s.end()=='_') return -1; // 下劃線結(jié)尾
return 0; // 是標(biāo)識(shí)符
}
string::iterator find_symbol(string::iterator first, string::iterator last, int& sym_length) // 標(biāo)識(shí)符匹配
{
string::iterator si;
for (vector<string>::iterator vsi=symbols.begin(); vsi!=symbols.end(); ++vsi)
{
si=search(first, last, vsi->begin(), vsi->end());
if (si!=last) { sym_length=vsi->size() ; return si; } //vsi-symbols.begin():標(biāo)識(shí)符的序號(hào)
}
return si;
}
vector<string> breaks(string s) // 按特殊符號(hào)分割
{
//bool is_symbol_bool(string s) { return (is_symbol(s)!=-1) ; }
vector<string> tmp(0);
string::iterator i=s.begin(),last=s.begin(); // last : 上一次分割后的位置
int sym_length; // 特殊符號(hào)的序號(hào)
while (i!=s.end())
{
i=find_symbol(last, s.end(), sym_length);
if (i!=s.end()) // 找到一個(gè)符號(hào)
{
if (i!=last) tmp.push_back(string(last, i));
tmp.push_back(string(i, i+sym_length) );
last=i+sym_length;
}
else
{
tmp.push_back(string(last, s.end()) );
}
}
return tmp;
}
int transform(string s) // 轉(zhuǎn)換為編碼
{
string output("");
int tmp;
tmp=is_keyWord(s);
if (tmp!=-1) return tmp+KEYWORD;
tmp=is_symbol(s);
if (tmp!=-1) return tmp+SYMBOL;
tmp=is_number(s);
if (tmp!=-1) return tmp+NUM;
tmp=is_mark(s);
if (tmp!=-1) return tmp+MARK;
return -1;
}
}//~namespace cmm
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -