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])
Category:Languages Category:Implemented Category:2016