Cogc

From Esolang
Jump to navigation Jump to search

Cogc (close/open/gotvat/comvar) is a asembeld langege where you need to open every stack and goto every var.

Evrything which suronded by : are eval as python code. Example:add :1+ord(' '): >> add 33

Cogc types

  • var : vat is a 8 bit int
  • stack : stack is both a namespace and an 8 bit stack

Cogc commands

  • create {var} : create {var}
  • delete {var} : delete {var} (note that at end of program all vars will be deleted)
  • gotvar {var} : goto {var}
  • comvar {var} : come from {var}
  • add {int} : increments the curent var by {int}
  • sub {int} : decrements the curent var by {int}
  • input : read one character into current var
  • print : print current var as ascii
  • while : while current var is not 0
  • end : end of while statment
  • open {stack} : goto {stack} and set namespace to {stack}
  • close {stacl} : come from {stack} and set namespace to global
  • push : push 'var' to current open stack and create new 'var' (NOTE: namespace should be cleard)
  • pop : pop current open stack create old 'var' (NOTE: namespace should be cleard)

When a stack is open the special variable 'var' is reserved to be the top of stack. '#' is comment. Stacks are created automatecly, no need to create them manualy.

Example truth machene code:

create inp
create _cp
create _check
gotvar _check
  add 1
comvar _check
gotvar inp
  input
  print
  sub :ord('0'):
  while
    comvar inp
    gotvar _check
      sub 1
    comvar _check
    gotvar inp
      while
        comvar inp
        gotvar _cp
          add 1
        comvar _cp
        gotvar inp
      end
  end
comvar inp
gotvar _check
  while
    comvar _check
    gotvar _cp
      print
    comvar _cp
    gotvar _check
  end

Example stack:

create a        # creates global a
gotvar a
  add :ord('a'):
  print          # prints a
comvar a
open stack
  create a      # creates local a
  govar a
    add :ord('b'):
    print     #  prints b
  comvar a
  gotvar var
    add :ord('c'):
  comvar var
  delete a    # only 'var' can remain
  push
  gotvar var
    add :ord('d'):
    print    # prints d
  comvar var
  pop
  gotvar var
    print    # prints c
  comvar var
close stack
open other
  gotvar var
     add :ord('e'):
     print    # prints e
   comvar var
close other
open stack
  gotvar var
    print    # prints c
  comvar var
close stack