6ix
Jump to navigation
Jump to search
6ix is a language with six commands by User:Maxsteele2.
Commands
All shown programs, when run, will result in this output:
Hello, World!
Goto
Goto goes to a specified line of the program.
goto3 This line isn't being read by interpreter. print Hello, world! end
Print prints a line.
print Hello, World! end
Var
Var creates & sets or reads a variable.
varSampleVariable=Hello World printvarSampleVariable end
Input
Input waits until a given input.
inputR print Hello, World! end
Loop
Loop repeats commands once, unless a goto says otherwise.
loop This line is being read twice by interpreter. loop print Hello, World! end
End
End terminates a program.
print Hello, World! end
Implementations
This may be an implementation of the language. It operates on all of the code snippets above in the expected way.
def run_6ix(method="input"): # puts input into code code = [] if method == "input": print("Enter your code here:") line = input() while line != "end": code.append(line.strip(' ')) line = input() else: for line in open(method, 'r'): code.append(line.strip('\n').strip(' ')) # instantiates pointer, variable name holder, # and loop checking variables pointer = 0 variable_names = {} in_loop = 0 loop_top = 0 # this function analyses the strings # to tell if they are variables or not def analyse_string(unanalysed: str) -> str: unanalysed = unanalysed.strip(' ') # strings which start with var # might be variables if "var" == unanalysed[:3]: further = unanalysed[3:].strip(' ') if further in variable_names: return variable_names[further] return unanalysed # the main code loop while pointer < len(code): if "goto" == code[pointer][:4]: # I decided goto could also use variables # as long as they passed goto requirements goto_num = analyse_string(code[pointer][4:]) # goto_num must consist of digits to become an int # this also rules out all negative numbers assert goto_num.isdigit(),\ f"Goto Error at line {pointer+1}: goto does not have a corresponding number." goto_num = int(goto_num) # goto_num must be within these bounds to work assert 1 <= goto_num <= len(code)+1,\ f"Goto Error at Line {pointer}: The goto points to a line which doesn't exist." pointer = int(goto_num) - 2 elif "print" == code[pointer][:5]: # the string must be analysed # in case it's a variable print_string = analyse_string(code[pointer][5:]) print(print_string) elif "input" == code[pointer][:5]: # this is a variable by default # so it cannot be analysed using the function input_var = code[pointer][5:].strip(" ") # the variable cannot be blank assert len(input_var) > 0,\ f"Input Error at line {pointer+1}: variable is not being assigned." variable_names[input_var] = input(">>") elif "var" == code[pointer][:3]: # this strips the code of spaces at the end # then splits it on the first equals and no later ones equals = code[pointer][3:].strip(" ").split("=", 1) # this is in case there is no equals sign assert len(equals) == 2,\ f"Var Error at line {pointer+1}: var is not being assigned." equals = [x.strip(" ") for x in equals] # the first argument is already a variable by default # the second argument might be a variable variable_names[equals[0]] = analyse_string(equals[1]) elif "loop" == code[pointer]: if in_loop == 0: # this is the beginning loop loop_top = pointer elif in_loop == 1: # this is the ending loop the first time pointer = loop_top else: # this is the ending loop the second time in_loop = -1 in_loop += 1 elif "end" == code[pointer]: break # putting the pointer increment here # forces the goto to not make sense # but saves on space a bit pointer += 1