资源简介

北邮-编译原理-词法分析

资源截图

代码片段和文件信息

#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


评论

共有 条评论