是否有可能获得有关luaL_loadstring等语法错误发生位置的更多信息?

时间:2013-08-22 07:44:11

标签: syntax lua

如果语法错误(如果有的话),根据文档返回

luaL_loadstring

有没有办法确定Lua首先确定哪里有语法错误或除返回值之外的任何其他信息,说明存在语法错误?

2 个答案:

答案 0 :(得分:4)

luaL_loadstring从手册中调用lua_load来完成实际工作:

  

加载一个Lua块(不运行它)。如果没有错误,lua_load将编译的块作为Lua函数推送到堆栈顶部。否则,会推送错误消息。

因此,您可以检查luaL_loadstring的返回值,如果它返回错误,请检查堆栈是否有错误消息。

答案 1 :(得分:1)

这只是余浩回答的一个例证 请不要害怕,这只是一些Pascal程序的摘录:-)

procedure TForm1.Button1Click(Sender: TObject);
   const
      Script = 'a = 56+';  // luaL_loadstring() would fail to load this code
   var
      L: Plua_State;
begin
   // Start Lua;
   L := luaL_newstate;
   if L <> nil then
      try
         // Load Lua libraries
         luaL_openlibs(L);
         // Load the string containing the script we are going to run
         if luaL_loadstring(L, PChar(Script)) <> 0 then
            // If something went wrong, error message is at the top of the stack
            ShowMessage('Failed to load() script'#10+String(lua_tostring(L, -1)))
         else begin
            // Ask Lua to run script
            if lua_pcall(L, 0, 0, 0) <> 0 then
               ShowMessage('Failed to run script'#10+String(lua_tostring(L, -1)))
            else begin
               lua_getglobal(L, 'a');
               ShowMessage('OK'#10'a = ' + IntToStr(lua_tointeger(L, -1)));
            end;
         end;
      finally
         // Close Lua;
         lua_close(L);
      end;
end;