Page namespace (page_namespace) | 0 |
Page title (without namespace) (page_title) | 'Deadfish x' |
Full page title (page_prefixedtitle) | 'Deadfish x' |
Old content model (old_content_model) | 'wikitext' |
New content model (new_content_model) | 'wikitext' |
Old page wikitext, before the edit (old_wikitext) | ''''Deadfish x''' is a superset of Jonathan Todd Skinner's [[Deadfish]]. There are twice as many commands and uses the XKCD variant.
I ([[firefly431|User:firefly431]]) will be writing a Python interpreter, but you guys can write whatever you want.
== Commands ==
{| class="wikitable"
|-
| x || Add 1 to x.
|-
| k || Output x to the console.
|-
| c || Square x.
|-
| d || Subtract 1 from x.
|-
| X || Start a function. The next character is the function name.
|-
| K || Output x as an ASCII character.
|-
| C || End the function or execute a function.
|-
| D || Set x to 0.
|}
== Rules ==
X (the variable) can only go from 0 to 255. If it goes above or below, it will be set to 0.
You can type as many commands as you want on a line, but the prompt will only be shown when you push enter.
== Sample Programs ==
To run these, save them and run them, or just copy and paste.
<pre><nowiki>
xxcxxxxcxxxxxxxxKDxxcxxxxxxcxKxxxxxxxKKxxxKDxxxxxxxcdddddKDxxxxxxcddddKDxxxcxxcddKddddddddKxxxKddddddKddddddddKDxxxxxxcdddK
</nowiki></pre>
Prints out "Hello, world!"
<pre><nowiki>
XUxKCxxcxxxxcCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCU
</nowiki></pre>
Prints out the entire alphabet.
== Interpreter ==
=== Python ===
My interpreter. Put something here if you find a bug.
<pre><nowiki>
# Deadfish x Programming Language
# By firefly431
# This is free and unencumbered software released into the public domain.
# Visit <http://unlicense.org/> for the full thing.
x = 0;
funcname = "";
curfunc = "";
lastc = '';
functions = {};
q_="i;iyratnrt gatmivpo";
_q=[0, 14, 17, 18, 4, 6, 10, 5, 7, 9, 2, 11, 8, 12, 16, 15, 13, 3, 1];
tar = [];
for i in _q: tar.append(q_[i]);
tar="".join(tar);
import webbrowser;
def openxkcd(num):
webbrowser.open("http://xkcd.com/"+str(num)+"/");
def process(c): #Finite State Machine
global x;
global funcname;
global curfunc;
global lastc;
global functions;
if x<0 or x>255:
x=0;
if (lastc == 'X'): #we are starting a function
funcname = c;
print("Function start: "+c);
lastc = ''; #so if the name is C or X we don't process it
return;
if (lastc == 'C'): #we are executing a function
print("Execute function: "+c);
lastc = ''; #same thing
if (c in functions):
for q in functions[c]: #c is taken
process(q);
else:
print("Function '"+c+"' does not exist.");
return;
if funcname != "" and c != 'C': #We are in a function
print("In function");
curfunc += c;
lastc = c;
return;
#check commands, function commands pass.
if c == "x":
x+=1;
elif c == "k":
print(str(x));
elif c == "c":
x*=x;
elif c == "d":
x-=1;
elif c == "X":
pass;
elif c == "K":
print(chr(x),end="");
elif c == "C":
if funcname != "":
print("End Function");
lastc = ''; #so we don't execute a function
functions[funcname] = curfunc;
funcname = "";
curfunc = "";
return;
elif c == "D":
x=0;
lastc = c;
def getInput(str = ""):
global x;
global tar;
if str=="":
inp = input(">> "); #change this to raw_input() if using python 2.x
else:
inp = str;
if inp == tar:
openxkcd(1061%354);
for c in inp:
process(c);
import sys;
fname = "";
lines = [];
if len(sys.argv)>1:
fname = sys.argv[1];
if fname != "":
try:
fp = open(fname,"r");
lines = fp.readlines();
fp.close();
except:
print("Could not open file '"+fname+"'.");
if len(lines)>0:
for line in lines:
getInput(line);
else:
try:
while True:
getInput();
except KeyboardInterrupt:
print("Bye!");
</nowiki></pre>
=== Lua ===
<pre><nowiki>
-- Deadfish x in pure Lua
-- By Atenfyr
local functions = {}
function deadfishx(str, tx)
local ignore = {}
local tx = tx or 0
for i = 1, #str do
if tx < 0 or tx > 255 then tx = 0 end
if not ignore[i] then
local instr = str:sub(i, i)
if instr == "x" then
tx = tx + 1
elseif instr == "k" then
io.write(tx)
elseif instr == "c" then
tx = tx ^ 2
elseif instr == "d" then
tx = tx - 1
elseif instr == "X" then
local _, nextC = str:sub(i+2):find("C")
nextC = nextC+i+1
for n = i+1, nextC do
ignore[n] = true
end
functions[str:sub(i+1, i+1)] = str:sub(i+2, nextC)
elseif instr == "K" then
io.write(string.char(tx))
elseif instr == "C" then
ignore[i+1] = true
tx = deadfishx(functions[str:sub(i+1, i+1)]:sub(1, -2), tx)
elseif instr == "D" then
tx = 0
end
end
end
return tx
end
-- If it's being loaded as a library (for some reason), then they now have the deadfishx function and the file can be closed
if pcall(debug.getlocal, 4, 1) then
return
end
local q_ = "i;iyratnrt gatmivpo"
local _q = {1, 15, 18, 19, 5, 7, 11, 6, 8, 10, 3, 12, 9, 13, 17, 16, 14, 4, 2}
local tar = {}
for _, i in pairs(_q) do
tar[#tar+1] = q_:sub(i, i)
end
tar = table.concat(tar, "")
local function openXKCD(n)
if package.config:sub(1,1) == "\\" then
os.execute('start "" "http:///xkcd.com/' .. n .. '/" >nul 2>&1')
else
-- I don't want to install Linux so if this breaks Linux users please let me know
os.execute("xdg-open http://xkcd.com/" .. n .. "/ &> /dev/null")
end
end
local x = 0
local tArgs = {...}
if tArgs[1] then
local open = io.open(tArgs[1], "r")
if not open then print("File does not exist!") os.exit() end
local content = open:read("*a"):gsub("\r\n", ""):gsub("\n", "")
open:close()
deadfishx(content, x)
os.exit()
end
while true do
io.write(">> ")
local cmd = io.read()
if cmd == tar then
openXKCD(1061%354)
else
x = deadfishx(cmd, x)
end
io.write("\n")
end
</nowiki></pre>
[[Category:Joke languages]]
[[Category:Output only]]
[[Category:Implemented]]
[[Category:Languages]]' |
New page wikitext, after the edit (new_wikitext) | ''''Deadfish x''' is a superset of Jonathan Todd Skinner's [[Deadfish]]. There are twice as many commands and uses the XKCD variant.
I ([[User:firefly431|firefly431]]) will be writing a Python interpreter, but you guys can write whatever you want.
== Commands ==
{| class="wikitable"
|-
| x || Add 1 to x.
|-
| k || Output x to the console.
|-
| c || Square x.
|-
| d || Subtract 1 from x.
|-
| X || Start a function. The next character is the function name.
|-
| K || Output x as an ASCII character.
|-
| C || End the function or execute a function.
|-
| D || Set x to 0.
|}
== Rules ==
X (the variable) can only go from 0 to 255. If it goes above or below, it will be set to 0.
You can type as many commands as you want on a line, but the prompt will only be shown when you push enter.
== Sample Programs ==
To run these, save them and run them, or just copy and paste.
<pre><nowiki>
xxcxxxxcxxxxxxxxKDxxcxxxxxxcxKxxxxxxxKKxxxKDxxxxxxxcdddddKDxxxxxxcddddKDxxxcxxcddKddddddddKxxxKddddddKddddddddKDxxxxxxcdddK
</nowiki></pre>
Prints out "Hello, world!"
<pre><nowiki>
XUxKCxxcxxxxcCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCU
</nowiki></pre>
Prints out the entire alphabet.
== Interpreter ==
=== Python ===
My interpreter. Put something here if you find a bug.
<pre><nowiki>
# Deadfish x Programming Language
# By firefly431
# This is free and unencumbered software released into the public domain.
# Visit <http://unlicense.org/> for the full thing.
x = 0;
funcname = "";
curfunc = "";
lastc = '';
functions = {};
q_="i;iyratnrt gatmivpo";
_q=[0, 14, 17, 18, 4, 6, 10, 5, 7, 9, 2, 11, 8, 12, 16, 15, 13, 3, 1];
tar = [];
for i in _q: tar.append(q_[i]);
tar="".join(tar);
import webbrowser;
def openxkcd(num):
webbrowser.open("http://xkcd.com/"+str(num)+"/");
def process(c): #Finite State Machine
global x;
global funcname;
global curfunc;
global lastc;
global functions;
if x<0 or x>255:
x=0;
if (lastc == 'X'): #we are starting a function
funcname = c;
print("Function start: "+c);
lastc = ''; #so if the name is C or X we don't process it
return;
if (lastc == 'C'): #we are executing a function
print("Execute function: "+c);
lastc = ''; #same thing
if (c in functions):
for q in functions[c]: #c is taken
process(q);
else:
print("Function '"+c+"' does not exist.");
return;
if funcname != "" and c != 'C': #We are in a function
print("In function");
curfunc += c;
lastc = c;
return;
#check commands, function commands pass.
if c == "x":
x+=1;
elif c == "k":
print(str(x));
elif c == "c":
x*=x;
elif c == "d":
x-=1;
elif c == "X":
pass;
elif c == "K":
print(chr(x),end="");
elif c == "C":
if funcname != "":
print("End Function");
lastc = ''; #so we don't execute a function
functions[funcname] = curfunc;
funcname = "";
curfunc = "";
return;
elif c == "D":
x=0;
lastc = c;
def getInput(str = ""):
global x;
global tar;
if str=="":
inp = input(">> "); #change this to raw_input() if using python 2.x
else:
inp = str;
if inp == tar:
openxkcd(1061%354);
for c in inp:
process(c);
import sys;
fname = "";
lines = [];
if len(sys.argv)>1:
fname = sys.argv[1];
if fname != "":
try:
fp = open(fname,"r");
lines = fp.readlines();
fp.close();
except:
print("Could not open file '"+fname+"'.");
if len(lines)>0:
for line in lines:
getInput(line);
else:
try:
while True:
getInput();
except KeyboardInterrupt:
print("Bye!");
</nowiki></pre>
=== Lua ===
<pre><nowiki>
-- Deadfish x in pure Lua
-- By Atenfyr
local functions = {}
function deadfishx(str, tx)
local ignore = {}
local tx = tx or 0
for i = 1, #str do
if tx < 0 or tx > 255 then tx = 0 end
if not ignore[i] then
local instr = str:sub(i, i)
if instr == "x" then
tx = tx + 1
elseif instr == "k" then
io.write(tx)
elseif instr == "c" then
tx = tx ^ 2
elseif instr == "d" then
tx = tx - 1
elseif instr == "X" then
local _, nextC = str:sub(i+2):find("C")
nextC = nextC+i+1
for n = i+1, nextC do
ignore[n] = true
end
functions[str:sub(i+1, i+1)] = str:sub(i+2, nextC)
elseif instr == "K" then
io.write(string.char(tx))
elseif instr == "C" then
ignore[i+1] = true
tx = deadfishx(functions[str:sub(i+1, i+1)]:sub(1, -2), tx)
elseif instr == "D" then
tx = 0
end
end
end
return tx
end
-- If it's being loaded as a library (for some reason), then they now have the deadfishx function and the file can be closed
if pcall(debug.getlocal, 4, 1) then
return
end
local q_ = "i;iyratnrt gatmivpo"
local _q = {1, 15, 18, 19, 5, 7, 11, 6, 8, 10, 3, 12, 9, 13, 17, 16, 14, 4, 2}
local tar = {}
for _, i in pairs(_q) do
tar[#tar+1] = q_:sub(i, i)
end
tar = table.concat(tar, "")
local function openXKCD(n)
if package.config:sub(1,1) == "\\" then
os.execute('start "" "http:///xkcd.com/' .. n .. '/" >nul 2>&1')
else
-- I don't want to install Linux so if this breaks Linux users please let me know
os.execute("xdg-open http://xkcd.com/" .. n .. "/ &> /dev/null")
end
end
local x = 0
local tArgs = {...}
if tArgs[1] then
local open = io.open(tArgs[1], "r")
if not open then print("File does not exist!") os.exit() end
local content = open:read("*a"):gsub("\r\n", ""):gsub("\n", "")
open:close()
deadfishx(content, x)
os.exit()
end
while true do
io.write(">> ")
local cmd = io.read()
if cmd == tar then
openXKCD(1061%354)
else
x = deadfishx(cmd, x)
end
io.write("\n")
end
</nowiki></pre>
[[Category:Joke languages]]
[[Category:Output only]]
[[Category:Implemented]]
[[Category:Languages]]' |