模块:Gilatoft/Compiler:修订间差异

来自「荏苒之境」
Sicusa移动页面模块:Gltd-Gilatoft/Compiler.lua模块:Gilatoft/Compiler,不留重定向
无编辑摘要
 
第1行: 第1行:
local tokenizer = require("Module:Gltd-Gilatoft/Compiler/Tokenizer.lua")
local tokenizer = require("Module:Gilatoft/Compiler/Tokenizer")
local parser = require("Module:Gltd-Gilatoft/Compiler/Parser.lua")
local parser = require("Module:Gilatoft/Compiler/Parser")
local assembler = require("Module:Gltd-Gilatoft/Compiler/Assembler.lua")
local assembler = require("Module:Gilatoft/Compiler/Assembler")


local io_open = io.open
local io_open = io.open

2025年8月7日 (四) 23:40的最新版本

此模块的文档可以在模块:Gilatoft/Compiler/doc创建

local tokenizer = require("Module:Gilatoft/Compiler/Tokenizer")
local parser = require("Module:Gilatoft/Compiler/Parser")
local assembler = require("Module:Gilatoft/Compiler/Assembler")

local io_open = io.open
local io_read = io.read

local read = tokenizer.read
local parse = parser.parse
local build = assembler.build

local compiler = {
    tokenizer = tokenizer,
    parser = parser,
    assembler = assembler
}

local function compile(source, location)
    local text = read(source, location)
    local phrases = parse(text)
    return build(phrases), phrases
end

compiler.compile = compile

compiler.compile_from = function(path)
    local file = assert(io_open(path,'r'), "cannot open file")
    local source = io_read("*a")
    file:close()
    return compile(source, path)
end

return compiler