gpt4 book ai didi

c++ - 嵌入 wxWidgets 的简单 Lua 解释器

转载 作者:太空狗 更新时间:2023-10-29 21:43:53 25 4
gpt4 key购买 nike

我正在尝试使用 wxWidgets 作为我的 GUI 来编写一个简单的 Lua 解释器。我正在从多行文本框中读取 Lua 命令。这是我的代码:

    wxString cmdStr = m_OutputWindow->GetLineText(line-1); //Read text

const char* commandStr=(const char*)cmdStr.mb_str();
int err=luaL_loadbuffer(luastate,commandStr,strlen(commandStr),"line")||lua_pcall(luastate, 0, 0, 0);
wxString outputstr;
if(err)
{
outputstr=wxString::FromUTF8(lua_tostring(luastate,-1));
lua_pop(luastate, 1);
}

如果我尝试计算像 3+5 这样的简单表达式,则会出现以下错误

 [string "line"]:1: syntax error near <eof>

任何想法表示赞赏。

最佳答案

如果您希望用户输入一个表达式(如 1+2a+math.sqrt(b)),您必须在其前面加上“return”在将其交给口译员之前:

const std::string cmdStr = "return " + m_OutputWindow->GetLineText(line-1).ToStdString();
int err = luaL_loadbuffer(luastate, cmdStr.c_str() , cmdStr.size(), "line")
|| lua_pcall(luastate, 0, 0, 0);

但是,如果用户输入语句(如 a=1; b=2),您可能不想将其放在前面。由于您正在阅读多行文本代码,因此您可能会得到由换行符分隔的语句字符串。在这种情况下,你不应该在 return 之前;你的测试的问题是你正在执行一个表达式,无法完成。 test with statement(s),几条评论显示一些类似下面的都是statement

a=4
return 1+2
return math.sqrt(a)
print('hi')

鉴于

a
4
1+2
math.sqrt(a)
'hi'

都是表达式。请注意,lua_tostring 将返回 block 返回的任何内容。如果该 block 不返回任何内容,则 lua_tostring 将返回 nil,就像任何不返回任何内容的函数在调用 ret=func(whatever) 时一样。

关于c++ - 嵌入 wxWidgets 的简单 Lua 解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21725867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com