Module:Polola: Difference between revisions
Jump to navigation
Jump to search
Created page with "local p = {} local deictic = { s = "present / visible / local", l = "distant / hidden / abstract" } local ontology = { d = "object (inanimate matter)", f = "living being (biological entity)", r = "energy (radiation / physical process)", g = "abstract thing (concept / thought)" } local dynamics = { g = "moving / changing / active", h = "stationary / static / at rest" } local operators = { ["+"] = " '''[OR]''' ", ["*"] = " '''[AN..." |
No edit summary |
||
| Line 1: | Line 1: | ||
local p = {} | 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*$") | |||
local function | |||
end | end | ||
-- A Polola nyelv gyökereinek és nyelvtani elemeinek elemzése | |||
function p.parse(frame) | function p.parse(frame) | ||
local | -- Ha sablonból hívják meg, az 'expr' paramétert olvassa be | ||
if | 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 | end | ||
local result = {} | local result = {} | ||
for token in string.gmatch( | |||
local | -- Biztonságos minták (az összetett karakterek % jellel vannak levédve) | ||
if | -- Í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 | |||
table.insert(result, | 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 | ||
end | end | ||
return table.concat(result, "") | |||
-- 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 | end | ||
return p | return p | ||
Revision as of 08:33, 3 July 2026
- This module lacks a documentation subpage. Please create it.
- Useful links: subpage list • links • transclusions • testcases • sandbox
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