資源簡介
北郵-編譯原理-詞法分析
代碼片段和文件信息
#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圖片掃描以及校正
評論
共有 條評論