forked from osmarks/potatOS
125 lines
2.5 KiB
Lua
125 lines
2.5 KiB
Lua
|
package.path = "../?.lua;" .. package.path
|
||
|
local Parser = require'ParseLua'
|
||
|
local util = require'Util'
|
||
|
local FormatIdentity = require'FormatIdentity'
|
||
|
local FormatMini = require'FormatMini'
|
||
|
local FormatBeautiful = require'FormatBeautiful'
|
||
|
require'strict'
|
||
|
|
||
|
function readAll(file)
|
||
|
local f = io.open(file, "rb")
|
||
|
local content = f:read("*all")
|
||
|
f:close()
|
||
|
return content
|
||
|
end
|
||
|
|
||
|
local g_lexTime = 0
|
||
|
local g_parseTime = 0
|
||
|
local g_reconstructTime = 0
|
||
|
|
||
|
function reconstructText(text)
|
||
|
local preLex = os.clock()
|
||
|
|
||
|
local success, tokens, ast, reconstructed
|
||
|
success, tokens = Parser.LexLua(text)
|
||
|
if not success then
|
||
|
print("ERROR: " .. tokens)
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local preParse = os.clock()
|
||
|
|
||
|
success, ast = Parser.ParseLua(tokens)
|
||
|
if not success then
|
||
|
print("ERROR: " .. ast)
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local preReconstruct = os.clock()
|
||
|
|
||
|
local DO_MINI = false
|
||
|
local DO_CHECK = false
|
||
|
|
||
|
if DO_MINI then
|
||
|
success, reconstructed = FormatMini(ast)
|
||
|
else
|
||
|
success, reconstructed = FormatIdentity(ast)
|
||
|
end
|
||
|
|
||
|
if not success then
|
||
|
print("ERROR: " .. reconstructed)
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local post = os.clock()
|
||
|
g_lexTime = g_lexTime + (preParse - preLex)
|
||
|
g_parseTime = g_parseTime + (preReconstruct - preParse)
|
||
|
g_reconstructTime = g_reconstructTime + (post - preReconstruct)
|
||
|
|
||
|
if DO_CHECK then
|
||
|
--[[
|
||
|
print()
|
||
|
print("Reconstructed: ")
|
||
|
print("--------------------")
|
||
|
print(reconstructed)
|
||
|
print("--------------------")
|
||
|
print("Done. ")
|
||
|
--]]
|
||
|
|
||
|
if reconstructed == text then
|
||
|
--print("Reconstruction succeeded")
|
||
|
else
|
||
|
print("Reconstruction failed")
|
||
|
|
||
|
local inputLines = util.splitLines(text)
|
||
|
local outputLines = util.splitLines(reconstructed)
|
||
|
local n = math.max(#inputLines, #outputLines)
|
||
|
for i = 1,n do
|
||
|
if inputLines[i] ~= outputLines[i] then
|
||
|
util.printf("ERROR on line %i", i)
|
||
|
util.printf("Input: %q", inputLines[i])
|
||
|
util.printf("Output: %q", outputLines[i])
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
--[*[
|
||
|
local files = {
|
||
|
"../ParseLua.lua",
|
||
|
"../FormatIdentity.lua",
|
||
|
"../Scope.lua",
|
||
|
"../strict.lua",
|
||
|
"../Type.lua",
|
||
|
"Test_identity.lua"
|
||
|
}
|
||
|
|
||
|
for _,path in ipairs(files) do
|
||
|
print(path)
|
||
|
local text = readAll(path)
|
||
|
reconstructText(text)
|
||
|
end
|
||
|
|
||
|
--]]
|
||
|
|
||
|
print("test_lines.txt")
|
||
|
|
||
|
local line_nr = 0
|
||
|
for text in io.lines("test_lines.txt") do
|
||
|
line_nr = line_nr + 1
|
||
|
if not text:find("FAIL") then
|
||
|
--util.printf("\nText: %q", text)
|
||
|
reconstructText(text)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
reconstructText('function a(p,q,r,...) end')
|
||
|
|
||
|
util.printf("Lex time: %f s", g_lexTime)
|
||
|
util.printf("Parse time: %f s", g_parseTime)
|
||
|
util.printf("Format time: %f s", g_reconstructTime)
|