Baz

From Esolang
Jump to: navigation, search

Baz is a joke programming language created by User:OriginalOldMan. Variables can only have 3 values in Baz: true, false, or baz.


Variables

Variables are assigned like so:

variablename = value

The following code would set the variable x equal to baz:

x = baz

Commands

There are only a few commands in baz.

Command Description Example
show<variable> Prints the value of a variable to the screen. show x Would print the value of x to the screen
get <variable> Gets input from the user and stores it in a variable.

Will only accept true, false or baz as valid input.

get x Would get input from the user and store it in x
if <variable> Works the same way as if statements in most languages.

If the variable is equal to baz, then there is a 50% chance that the if statment will run

if x

show x

endif Prints the value of x if x is equal to true

if! <variable> The if! statement is the same as the if

statement,except it executes when the variable is false.

if! x

show x

endif Prints the value of x if x is equal to false

goto <line> Jumps the program to a specific line show true

goto 1 Would infinitely print true

end Ends the program

Error Reporting

Errors are reported like so:

YOU ARE WRONG!@<linenumber>

An error at line 1 would look like this:

YOU ARE WRONG!@1

Programs

Cat Program (Only accepts true, false and baz):

get x
show x

Truth-machine (Using true and false rather than one and zero):

get x
if x
show true
goto 3
endif
show false
end

Randomly prints true and false:

if baz
show true
goto 1
endif
show false
goto 1

Quine

YOU ARE WRONG!@1

Interpreter in Ruby

print Dir.pwd
print " $ "
$vars = {}
$c = 0
$vars ["baz"] = "baz"
$vars ["true"] = "true"
$vars ["false"] = "false"
file = File.open(gets.delete("\n"),"r")
$program = file.read
$program = $program.split("\n")
def tokenize(line)
tokens = []
if line.match(/.+=.+/)
       line = line.delete(" ")
       line = line.split("=")
       tokens[1] = line[0]
       tokens[0] = "setvar"
       tokens[2] = line[1]
else
       tokens = line.split(" ")
end
return tokens
end
def exe(line)
if line[0] == "setvar"
       if $vars[line[2]] == "true" or $vars[line[2]] == "false" or $vars[line[2]] == "baz"
       $vars[line[1]] = $vars[line[2]]
       else
       e = $c+1
       abort "YOU ARE WRONG!@#{e}"
       end
elsif line[0] == "show"
       if line.count == 2
       puts $vars[line[1]]
       else
       e = $c+1
       abort "YOU ARE WRONG!@#{e}"
       end
elsif line[0] == "get"
       if line.count == 2
       tvar = gets.delete("\n")
       if tvar == "true" or tvar == "false" or tvar == "baz"
              $vars[line[1]] = tvar
       else
       e = $c+1
       abort "YOU ARE WRONG!@#{e}"
       end
       end
elsif line[0] == "if"
       if line.count == 2
       x =  $vars[line[1]] == "baz" and rand(2) == 1
       if $vars[line[1]] == "false" or x
       l = $c
       b = 0
       while b == 0
       if $program[l] == "endif"
       b=1
       $c = l
       end
       l+=1
       end
       end
       else
       e = $c+1
       abort "YOU ARE WRONG!@#{e}"
       end
elsif line[0] == "if!"
       if line.count == 2
       x = $vars[line[1]] == "baz" and rand(2) == 1
       if $vars[line[1]] == "true" or x 
       l = $c
       b = 0
       while b == 0
       if $program[l] == "endif"
       b=1
       $c = l
       end
       l+=1
       end
       end
       else
       e = $c+1
       abort "YOU ARE WRONG!@#{e}"
       end
elsif line[0] == "goto"
if line.count == 2
$c = line[1].to_i - 2
else 
e = $c+1
abort("YOU ARE WRONG!@#{e}")
end
elsif line[0] == "end"
abort
elsif line[0] == "endif"
else
e = $c + 1
abort "YOU ARE WRONG!@#{e}"
end
end
def run(program)
while $c < program.count
exe(tokenize(program[$c]))
$c+=1
end
end
run($program)