https://github.com/leozhang1/QtInterpreter 中 ParserException.cpp代码展示
时间: 2023-09-27 17:11:38 浏览: 45
以下是 `ParserException.cpp` 的代码展示:
```c++
#include "ParserException.h"
ParserException::ParserException(const std::string& msg, size_t line, size_t column) :
std::runtime_error(msg), m_line(line), m_column(column) {}
const char* ParserException::what() const noexcept {
std::ostringstream os;
os << "ParserError: " << std::runtime_error::what() << " (line " << m_line << ", column " << m_column << ")";
return os.str().c_str();
}
```
这是一个 C++ 类,名为 `ParserException`。它继承自 `std::runtime_error`,并且包含了两个成员变量 `m_line` 和 `m_column`,分别表示出错的行号和列号。构造函数接受三个参数:`msg` 表示错误信息,`line` 表示出错的行号,`column` 表示出错的列号。`what()` 函数返回一个字符串,其中包含了错误类型、错误信息、以及出错的位置。
相关问题
https://github.com/leozhang1/QtInterpreter cpp代码展示
以下是QtInterpreter的cpp代码展示:
Interpreter类的头文件Interpreter.h:
```cpp
#ifndef INTERPRETER_H
#define INTERPRETER_H
#include <QObject>
#include <QMap>
#include <QString>
class Interpreter : public QObject
{
Q_OBJECT
public:
explicit Interpreter(QObject *parent = nullptr);
void interpret(QString input);
signals:
void output(QString output);
private:
QMap<QString, double> variables;
};
#endif // INTERPRETER_H
```
Interpreter类的实现文件Interpreter.cpp:
```cpp
#include "Interpreter.h"
#include <QDebug>
Interpreter::Interpreter(QObject *parent) : QObject(parent)
{
}
void Interpreter::interpret(QString input)
{
QStringList tokens = input.split(" ");
if(tokens[0] == "let")
{
QString varName = tokens[1];
double value = tokens[3].toDouble();
variables[varName] = value;
QString output = varName + " = " + QString::number(value);
emit this->output(output);
}
else if(tokens[0] == "print")
{
QString varName = tokens[1];
double value = variables[varName];
QString output = varName + " = " + QString::number(value);
emit this->output(output);
}
else
{
emit this->output("Syntax error: " + input);
}
}
```
该Interpreter类包含interpret方法,该方法接受用户输入的字符串并将其解释为变量声明或打印语句。如果输入的字符串以“let”开头,则解释为变量声明,并将变量名称和值存储在variables映射中。如果输入的字符串以“print”开头,则解释为打印语句,并输出变量名称和值。如果输入的字符串不是合法的语句,则发出语法错误的信号。
https://github.com/leozhang1/QtInterpreter 中 ParserException类所属头文件,代码展示
ParserException类所属的头文件是parserexception.h,下面是该类的代码展示:
```c++
#ifndef PARSEREXCEPTION_H
#define PARSEREXCEPTION_H
#include <exception>
#include <string>
namespace interpreter {
class ParserException : public std::exception {
public:
explicit ParserException(const std::string& message);
const char* what() const noexcept override;
private:
std::string m_message;
};
}
#endif // PARSEREXCEPTION_H
```
这是一个自定义异常类,继承自标准库中的std::exception类。它有一个构造函数,用于传入异常信息,以及一个what()函数,用于返回异常信息。在这个异常类中,我们可以自定义一些异常信息,比如语法错误等,然后在解释器中抛出该异常。这样,当出现异常时,我们就可以得到清晰的错误提示。