[lexical_analyzer.h]
#ifndef lexical_analyzer_h
#define lexical_analyzer_h
enum lexical_status
;enum token_category
;struct token
;class lexical_analyzer
;inline lexical_analyzer::lexical_analyzer(std::istream& ifs)
:m_pstream(&ifs), m_line(1)
inline int lexical_analyzer::current_line() const
inline int lexical_analyzer::peek_char()
inline void lexical_analyzer::skip_char()
#endif//lexical_analyzer_h
[lexical_analyzer.cpp]
#include
#include "lexical_analyzer.h"
int lexical_analyzer::get_char()
void lexical_analyzer::putback(char ch)
bool lexical_analyzer::filter_space()
while (isspace(ch));
return true;
}return false;
}bool lexical_analyzer::filter_comment()
}else if(ch=='*')
}else
return true;
}else
}bool lexical_analyzer::is_keyword(const std::string& str)
;for(int i=0; i='a' && s[i]<='f')
x += s[i]-'a' + 10;
else if(s[i]>='a' && s[i]<='f')
x += s[i]-'a' + 10;
else
x += s[i]-'0';
}ch = (char)x;}}
result += ch;
}return result;
}std::string lexical_analyzer::get_digital_string()
putback(ch);
return result;
}std::string lexical_analyzer::get_hex_string()
putback(ch);
return result;
}lexical_status lexical_analyzer::get_token(token& t)
while(filter_comment() || filter_space())
if(m_pstream->eof())
return status_eof;
t.value.resize(0);
char ch = get_char();
if(ch=='_' || isalpha(ch) || isdigit(ch) || ch=='$')
while(ch=='_' || isalpha(ch) || isdigit(ch) || ch=='$');
putback(ch);
}else if(isdigit(ch))
else if(isdigit(ch))
}else if(ch=='/"')
else if(ch=='/'')
else
}else if(ch=='+' || ch=='-')
else if(cc=='=')
else if(ch=='-' && cc=='>')
}else
}else if(ch=='*' || ch=='/' || ch=='%' || ch=='^' || ch=='!')
}else if(ch=='<' || ch=='>')
}else if(cc=='=')
else
}else if(ch=='.')
else if(ch=='.')
else
}else
}else if(ch=='~' || ch =='?' ||
ch=='[' || ch==']' ||
ch=='(' || ch==')'
)else if(ch==';' || ch==''|| ch==','|| ch=='#' )
else if(ch=='//')
else
}else
}if(t.category == token_identifier && is_keyword(t.value))
return status_success;
}[main.c], 測試程式
#include
#include
#include
#include "lexical_analyzer.h"
int main()
return 0;
}
C 詞法分析器
編譯原理實驗 一 實驗題目 設計 編制 除錯乙個識別一簡單語言單詞的詞法分析程式。程式能夠識別基本字 識別符號 無符號整數 浮點數 運算子和界符 單詞符號及種別表如下 單詞符號 種別編碼 begin1if 2then 3while4do 5end 6l l d 10dd 11 13 14 15 16...
詞法分析器
這是我自己的第一篇部落格,就分享一下最近才做完的編譯原理實驗,詞法分析器。本次實驗中我用mysql資料庫儲存自動機狀態表,這樣做的目的只是為了在後續的課設中可以繼續使用現在的 這一段 並不是太完善,發出來只是為了太完善。裡面還有很多問題,比如對字元和字串的識別,不知道為什麼資料庫無法將 和 轉換到我...
詞法分析器
include using namespace std const int maxn 1e3 10 int n 輸入文字的行數 char buffer maxn maxn 緩衝區 int len maxn 輸入文字每行的列數 struct out 輸出格式 out string a,int b re...