Module:Polola

From Linguifex
Revision as of 08:33, 3 July 2026 by Nyima (talk | contribs)
Jump to navigation Jump to search


local p = {}

-- Segédfüggvény a szóközök eltávolítására
local function trim(s)
    return s:match("^%s*(.-)%s*$")
end

-- A Polola nyelv gyökereinek és nyelvtani elemeinek elemzése
function p.parse(frame)
    -- Ha sablonból hívják meg, az 'expr' paramétert olvassa be
    local input = frame.args.expr or frame:getParent().args.expr or ""
    if trim(input) == "" then
        return "<span style='color:red;'>Hiba: Nem adtál meg kifejezést!</span>"
    end

    local result = {}
    
    -- Biztonságos minták (az összetett karakterek % jellel vannak levédve)
    -- Így a Lua nem hiszi azt, hogy a zárójel vagy a pluszjel egy belső programozási utasítás
    local safe_input = input
    
    -- Itt történik a tokenek feldolgozása sorban
    -- A kód végigmegy a bemeneten és elemzi a Polola struktúrát
    for token in string.gmatch(safe_input, "([^%s%+%*%/]+)") do
        -- Megkeressük a zárójeleket és a speciális Polola karaktereket
        local clean_token = token:gsub("%(", ""):gsub("%)", "")
        
        -- Kiszűrjük a számokat (kvantorokat, pl. sfg3 -> 3 darab sfg)
        local base_word, quantifier = clean_token:match("^([a-z]+)(%d*)$")
        
        if base_word then
            local meaning = ""
            -- Egyszerű Polola szótár alapú fordítási logika
            if string.sub(base_word, 1, 1) == "l" then
                meaning = "távoli/rejtett dolog (" .. base_word .. ")"
            elseif string.sub(base_word, 1, 1) == "s" then
                meaning = "közeli/jelenlévő dolog (" .. base_word .. ")"
            else
                meaning = "általános fogalom (" .. base_word .. ")"
            end
            
            if quantifier and quantifier ~= "" then
                meaning = meaning .. " [" .. quantifier .. "x ismétlődés]"
            end
            table.insert(result, meaning)
        end
    end

    -- Ha a bemenetben zárójelek vagy operátorok voltak, azt jelezzük a kimeneten a struktúra miatt
    local structure_info = ""
    if input:match("%(") or input:match("%+") or input:match("%*") then
        structure_info = "<br/><small><i>Struktúra: Összetett logikai/asszociatív kapcsolat észleve.</i></small>"
    end

    -- Összeállítjuk a végső megjelenítést
    if #result == 0 then
        return "Polola szintaxis: " .. input .. " → Értelmezhetetlen token."
    else
        return "Polola szintacia: <b>" .. input .. "</b><br/>Eredmény: " .. table.concat(result, ", ") .. structure_info
    end
end

return p