W-INTERCAL
W-INTERCAL is a version of INTERCAL made by Kiwitrader (talk) 03:31, 13 August 2016 (UTC)
It is recommended that novice programmers learn this rather than INTERCAL.
Syntax:
if you definitely want the interpreter to do something, use PLEASE.
PLEASE command
otherwise, use DO:
DO COMMAND
will have a one in 2 chance of executing the command.
comments are issued by IGNORE:
PLEASE IGNORE this text is not executed
variables are set bu using:
PLEASE SET VAR NAME -> VALUE TYPE
for example, to set hello to "Hello world":
PLEASE SET VAR HELLO -> "Hello world" STRING
the new and improved syntax of COME FROM IS:
PLEASE COME FROM STARTLINE TO ENDLINE
or:
PLEASE COME FROM LINE
and it will execute the lines specified.
to output a variable, use
-->
PLEASE --> NAME
there are five operators in W-INTERCAL:
ADD NUM NUM2 NUM3 NAME
and it stores the sum in name.
also,
SUB MUL DIV MOD
work the same way.
the five supported types are:
INTEGER STRING FLOAT ARRAY
to append to an array:
PLEASE ADDTO ARRAYNAME VALUE
note that in W-INTERCAL, arrays start counting from 1.
PLEASE INSERT NAME INDEX VALUE
the only way to store ints in an array is to create an variable:
PLEASE SET VAR V -> 3 INTEGER PLEASE SET VAR L -> [] ARRAY PLEASE ADDTO L V
and the
DELETE
keyword deletes an item from the list:
PLEASE DELETE L 1
now
L
is an empty list.
and finally, the abstain keyword is to abstain from doing something.
ABSTAIN FROM ABSTAIN
I have a python 3 interpreter of it here:
from random import choice
with open('main.wint', 'r') as f:
prog = f.readlines()
keywords = ['PLEASE', 'DO', 'ABSTAIN']
ablist = []
progg = []
var = {}
for item in prog:
progg.append(item.strip())
prog = progg[:]
x = []
for line in prog:
line = line.split()
x.append(line)
for ins in x:
if ins[0] == keywords[0]: # PLEASE
if ins[1] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
elif ins[1] == 'COME' and ins[2] == 'FROM':
instr = x[int(ins[3]) - 1:int(ins[5])]
for ins in instr:
if ins[1] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
elif ins[1] == 'SET':
if ins[4] == '->' and ins[2] == 'VAR':
if ins[4] == '->' and ins[2] == 'VAR':
if ins[6] == 'STRING':
var[str(ins[3])] = str(ins[5])
elif ins[6] == 'INTEGER':
var[str(ins[3])] = int(ins[5])
elif ins[6] == 'FLOAT':
var[str(ins[3])] = float(ins[5])
elif ins[6] == 'ARRAY':
var[str(ins[3])] = []
else:
print('INVALID SYNTAX')
elif ins[1] == '-->':
try:
print('"'+var[str(ins[2])]+'"', end=' ')
except:
print(var[str(ins[2])], end=' ')
elif ins[1] == 'NEWLINE':
print()
elif ins[1] == 'PRINT':
out = ""
for string in ins[2:]:
out = out + ' ' + string
print('"'+out[1:]+'"',end=' ')
elif ins[1] == 'GETINPUT':
inp = input()
var[str(ins[2])] = inp
elif ins[1] == 'ADD':
add = 0
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add += int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'SUB':
if ins[2] in var.keys():
ins[2] = int(var[ins[2]])
if ins[3] in var.keys():
ins[3] = int(var[ins[3]])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add -= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MUL':
add = 1
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add *= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'DIV':
if ins[2] in var.keys():
ins[2] = int(var[ins[2]])
if ins[3] in var.keys():
ins[3] = int(var[ins[3]])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add /= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MOD':
if ins[2] in var.keys():
ins[2] = int(var[str(ins[2])])
if ins[3] in var.keys():
ins[3] = int(var[str(ins[3])])
add = int(ins[2]) % int(ins[3])
var[str(ins[-1])] = int(add)
elif ins[1] == 'ADDTO':
x = ins[3]
if x in var.keys():
x = var[x]
var[str(ins[2])].append(x)
elif ins[1] == 'DELETE':
del var[ins[2]][int(ins[3]) - 1]
elif ins[1] == 'INSERT':
x = ins[4]
if x in var.keys():
x = var[x]
y = ins[3]
y = int(y) - 1
var[ins[2]].insert(y, x)
elif ins[1] == 'GETOUT':
var[ins[4]] = var[ins[2]][int(ins[3]) - 1]
elif ins[1] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
else:
print("INVALID SYNTAX:", ins[0])
elif ins[1] == 'SET':
if ins[4] == '->' and ins[2] == 'VAR':
if ins[6] == 'STRING':
var[str(ins[3])] = str(ins[5])
elif ins[6] == 'INTEGER':
var[str(ins[3])] = int(ins[5])
elif ins[6] == 'FLOAT':
var[str(ins[3])] = float(ins[5])
elif ins[6] == 'ARRAY':
var[str(ins[3])] = []
else:
print('INVALID SYNTAX')
elif ins[1] == '-->':
try:
print('"'+var[str(ins[2])]+'"', end=' ')
except:
print(var[str(ins[2])], end=' ')
elif ins[1] == 'NEWLINE':
print()
elif ins[1] == 'PRINT':
out = ""
for string in ins[2:]:
out = out + ' ' + string
print(out[1:],end=' ')
elif ins[1] == 'GETINPUT':
inp = input()
var[str(ins[2])] = inp
elif ins[1] == 'ADD':
add = 0
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add += int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'SUB':
add = int(ins[2])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add -= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MUL':
add = 1
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add *= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'DIV':
if ins[2] in var.keys():
ins[2] = int(var[ins[2]])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add /= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MOD':
if ins[2] in var.keys():
ins[2] = int(var[str(ins[2])])
if ins[3] in var.keys():
ins[3] = int(var[str(ins[3])])
add = int(ins[2]) % int(ins[3])
var[str(ins[-1])] = int(add)
elif ins[1] == 'ADDTO':
x = ins[3]
if x in var.keys():
x = var[x]
var[ins[2]].append(x)
elif ins[1] == 'DELETE':
del var[ins[2]][int(ins[3]) - 1]
elif ins[1] == 'INSERT':
x = ins[4]
if x in var.keys():
x = var[x]
y = ins[3]
y = int(y) - 1
var[ins[2]].insert(y, x)
elif ins[1] == 'GETOUT':
var[ins[4]] = var[ins[2]][int(ins[3]) - 1]
elif ins[1] == 'ABSTAIN':
ablist.append(ins[3])
elif ins[1] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
else:
print("INVALID SYNTAX:", ins)
elif ins[0] == keywords[1]: # DO
x = [1,2]
if choice(x) == 1:
if ins[1] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
elif ins[1] == 'COME' and ins[2] == 'FROM':
ins = x[int(ins[-1]) - 1]
if ins[1] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
elif ins[1] == 'SET':
if ins[4] == '->' and ins[2] == 'VAR':
if ins[6] == 'STRING':
var[str(ins[3])] = str(ins[5])
elif ins[6] == 'INTEGER':
var[str(ins[3])] = int(ins[5])
elif ins[6] == 'FLOAT':
var[str(ins[3])] = float(ins[5])
elif ins[6] == 'ARRAY':
var[str(ins[3])] = []
else:
print('INVALID SYNTAX')
elif ins[1] == '-->':
try:
print('"'+var[str(ins[2])]+'"', end=' ')
except:
print(var[str(ins[2])], end=' ')
elif ins[1] == 'NEWLINE':
print()
elif ins[1] == 'PRINT':
out = ""
for string in ins[2:]:
out = out + ' ' + string
print(out[1:],end=' ')
elif ins[1] == 'GETINPUT':
inp = input()
var[str(ins[2])] = inp
elif ins[1] == 'ADD':
add = 0
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add += int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'SUB':
if ins[2] in var.keys():
ins[2] = int(var[ins[2]])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add -= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MUL':
add = 1
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add *= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'DIV':
if ins[2] in var.keys():
ins[2] = int(var[ins[2]])
add = int(ins[2])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add /= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MOD':
if ins[2] in var.keys():
ins[2] = int(var[str(ins[2])])
if ins[3] in var.keys():
ins[3] = int(var[str(ins[3])])
add = int(ins[2]) % int(ins[3])
var[str(ins[-1])] = int(add)
elif ins[1] == 'ADDTO':
x = ins[3]
if x in var.keys():
x = var[x]
var[str(ins[2])].append(x)
elif ins[1] == 'DELETE':
del var[ins[2]][int(ins[3]) - 1]
elif ins[1] == 'INSERT':
x = ins[4]
if x in var.keys():
x = var[x]
y = ins[3]
y = int(y) - 1
var[ins[2]].insert(y, x)
elif ins[1] == 'GETOUT':
var[ins[4]] = var[ins[2]][int(ins[3]) - 1]
elif ins[1] == 'ABSTAIN':
ablist.append(ins[3])
elif ins[1] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
else:
print("INVALID SYNTAX")
elif ins[1] == 'ADD':
add = 0
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add += int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'SUB':
if ins[2] in var.keys():
ins[2] = int(var[ins[2]])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add -= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MUL':
add = 1
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add *= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'DIV':
if ins[2] in var.keys():
ins[2] = int(var[ins[2]])
add = int(ins[2])
for integ in ins[2:-1]:
if integ in var.keys():
integ = int(var[str(integ)])
add /= int(integ)
var[str(ins[-1])] = int(add)
elif ins[1] == 'MOD':
if ins[2] in var.keys():
ins[2] = int(var[str(ins[2])])
if ins[3] in var.keys():
ins[3] = int(var[str(ins[3])])
add = int(ins[2]) % int(ins[3])
var[str(ins[-1])] = int(add)
elif ins[1] == 'PRINT':
out = ""
for string in ins[2:]:
out = out + ' ' + string
print(out[1:],end=' ')
elif ins[1] == 'SET':
if ins[4] == '->' and ins[2] == 'VAR':
if ins[6] == 'STRING':
var[str(ins[3])] = str(ins[5])
elif ins[6] == 'INTEGER':
var[str(ins[3])] = int(ins[5])
elif ins[6] == 'FLOAT':
var[str(ins[3])] = float(ins[5])
elif ins[6] == 'ARRAY':
var[str(ins[3])] = []
else:
print('INVALID SYNTAX')
elif ins[1] == '-->':
try:
print('"'+var[str(ins[2])]+'"', end=' ')
except:
print(var[str(ins[2])], end=' ')
elif ins[1] == 'NEWLINE':
print()
elif ins[1] == 'GETINPUT':
inp = input()
var[str(ins[2])] = inp
elif ins[0] == 'IGNORE':
continue
elif ins[1] == 'ADDTO':
x = ins[3]
if x in var.keys():
x = var[x]
var[str(ins[2])].append(x)
elif ins[1] == 'DELETE':
del var[ins[2]][int(ins[3]) - 1]
elif ins[1] == 'INSERT':
x = ins[4]
if x in var.keys():
x = var[x]
y = ins[3]
y = int(y) - 1
var[ins[2]].insert(y, x)
elif ins[1] == 'GETOUT':
var[ins[4]] = var[ins[2]][int(ins[3]) - 1]
else:
print("INVALID SYNTAX")
elif ins[0] == keywords[2]: # ABSTAIN
if ins[0] in ablist:
ahfkjshaldkfjshakjfhsdajlhsdlfjwehaiuryafehwlGSDhbc = 0
else:
ablist.append(ins[2])