资源简介
北邮-编译原理-词法分析
代码片段和文件信息
#include “automaton.h“
string keywords[] = { “auto“ “break“ “case“ “char““const““continue“
“default““do““double““else““enum““extern“ “float““for““goto““if“
“inline““int““long““register““restrict““return““short““signed““sizeof“
“static““struct““switch““typeof““union““unsigned““void““volatile““while“
“_Alignof““_Atomic““_Bool““_Complex““_Generic““_Imaginary““_Noreturn“
“_Static_assert““_Thread_local““None“ };
string types2[] = { “Keyword“
“Identifier“
“NumericConstant“
“NumericConstantWithError“
“CharacterConstant“
“StringLiteral“
“Punctuator“
“PreprocessingDirective“
“EndOfFile“
“Unknown“
};
Automaton::Automaton(string file) :reader(file){
for (string str : keywords) {
keywordSet.insert(str);
}
};
Token Automaton::getoken(STATE statestring valueLocation loc) {
char ch;
if (state == START) {
loc.updateLoc(reader.getRow() reader.getCol());
if (reader.isEmpty()) {
loc.updateLoc(reader.getRow() reader.getCol() - 1);
return Token(EndOfFile value loc);
}
ch = reader.getChar();
while (ch == (char)0xcc || ch == ‘\n‘ || isblank(ch)) {
if (reader.isEmpty()) {
return Token(EndOfFile value loc);
}
loc.updateLoc(reader.getRow() reader.getCol());
ch = reader.getChar();
}
}
switch (state) {
case START: {
if ((ch >= ‘A‘&&ch <= ‘Z‘) || (ch >= ‘a‘&&ch <= ‘z‘) || ch == ‘_‘) {
return getoken(KEYWORD value + ch loc);
}
else if (ch >= ‘0‘ && ch <= ‘9‘) {
return getoken(DIGIT value + ch loc);
}
else if (ch == ‘.‘) {
return getoken(DOT value + ch loc);
}
else if (ch == ‘-‘) {
return getoken(MINUS value + ch loc);
}
else if (ch == ‘+‘) {
return getoken(PLUS value + ch loc);
}
else if (ch == ‘&‘) {
return getoken(AND value + ch loc);
}
else if (ch == ‘*‘) {
return getoken(STAR value + ch loc);
}
else if (ch == ‘!‘) {
return getoken(EXCLAIM value + ch loc);
}
else if (ch == ‘/‘) {
return getoken(SLASH value + ch loc);
}
else if (ch == ‘%‘) {
return getoken(PERCENT value + ch loc);
}
else if (ch == ‘<‘) {
return getoken(LESS value + ch loc);
}
else if (ch == ‘>‘) {
return getoken(GREATER value + ch loc);
}
else if (ch == ‘=‘) {
return getoken(EQUAL value + ch loc);
}
else if (ch == ‘^‘) {
return getoken(CARET value + ch loc);
}
else if (ch == ‘|‘) {
return getoken(PIPE value + ch loc);
}
else if (ch == ‘;‘) {
return getoken(COLON value + ch loc);
}
else if (ch == ‘#‘) {
return getoken(HASH value + ch loc);
}
else if (ch == ‘“‘) {
return getoken(STRING value + ch loc);
}
else if (ch == ‘\‘‘) {
return getoken(CHAR value + ch loc);
}
else {
if (ch == ‘$‘) {
return Token(Unknown value + ch loc);
}
return Token(Punctuator value + ch loc);
}
break;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 336724 2020-10-25 22:26 2018210251-杨振宇-词法分析\2018210251-杨振宇-词法分析.docx
文件 9517 2020-10-25 00:07 2018210251-杨振宇-词法分析\automaton.cpp
文件 923 2020-10-25 00:06 2018210251-杨振宇-词法分析\automaton.h
文件 384 2020-10-25 00:06 2018210251-杨振宇-词法分析\main.cpp
文件 2431 2020-10-25 17:21 2018210251-杨振宇-词法分析\main.l
文件 979 2020-10-23 00:02 2018210251-杨振宇-词法分析\reader.cpp
文件 441 2020-10-24 01:07 2018210251-杨振宇-词法分析\reader.h
文件 341 2020-10-25 00:10 2018210251-杨振宇-词法分析\test.txt
文件 835 2020-10-25 00:06 2018210251-杨振宇-词法分析\token.cpp
文件 656 2020-10-25 00:06 2018210251-杨振宇-词法分析\token.h
目录 0 2020-10-25 22:27 2018210251-杨振宇-词法分析
----------- --------- ---------- ----- ----
353231 11
- 上一篇:弹跳的小球(test.c)
- 下一篇:opencv图片扫描以及校正
相关资源
- 北邮高级计算机体系结构记分牌程序
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- [BUPT]面向对象程序设计C++ - 平时作业
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 词法分析器有去除注释功能
- 足球俱乐部管理系统——北邮c++2课程
- 自定义词法规则的词法分析器
- 简单函数绘图语言的解释器
- C语言词法分析程序
- 北邮C++小学期坦克大战代码及报告
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析C++源码
- 词法分析代码内有报告
- 北邮SQL实验四实验报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
评论
共有 条评论