https://github.com/leozhang1/QtInterpreter这个链接 lex.cpp代码 展示
时间: 2023-10-07 18:07:14 浏览: 88
这个链接中的项目是一个Qt实现的解释器,其中包含一个lex.cpp文件,用于实现词法分析器。
以下是lex.cpp的代码:
```cpp
#include "lex.h"
Lex::Lex(QString text)
{
this->text = text;
this->pos = 0;
}
Token Lex::getNextToken()
{
while (this->pos < this->text.size())
{
// skip whitespace
if (this->text[this->pos].isSpace())
{
this->pos++;
continue;
}
// operations
if (this->text[this->pos] == '+')
{
this->pos++;
return Token(PLUS, "+");
}
if (this->text[this->pos] == '-')
{
this->pos++;
return Token(MINUS, "-");
}
if (this->text[this->pos] == '*')
{
this->pos++;
return Token(MUL, "*");
}
if (this->text[this->pos] == '/')
{
this->pos++;
return Token(DIV, "/");
}
// numbers
if (this->text[this->pos].isDigit())
{
QString numStr;
while (this->pos < this->text.size() && this->text[this->pos].isDigit())
{
numStr += this->text[this->pos];
this->pos++;
}
return Token(NUMBER, numStr);
}
// error
return Token(ERROR, "Error");
}
return Token(EOF_, "");
}
```
该代码中包含了一个名为Lex的类,该类的构造函数接受一个QString类型的参数,表示需要进行词法分析的文本。getNextToken()方法用于获取文本中的下一个Token(标记)。在这个方法中,首先跳过空格,然后判断当前字符是否是加号、减号、乘号、除号或数字,根据不同的情况返回不同的Token。如果无法识别当前字符,则返回一个错误Token。如果已经遍历完整个文本,则返回一个表示EOF(文件结束)的Token。
需要注意的是,该代码只是一个简单的词法分析器实现,只能处理加减乘除和整数。在实际应用中,可能需要处理更多类型的Token,并且需要处理更复杂的语法。
阅读全文