We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.

Counterlang

From Esolang
Jump to navigation Jump to search

Counterlang uses counters to do stuff

The stuff

Counter

count a #make a a counter initialized as 0
a1 #add 1 to counter of a
a-2 #add -2 to counter of a
a2 #add 2 to counter of a
aa #add a to counter of a (double)
aa #double
aa #double a is 16 now
a- #reset a to 0

Print

.1 #prints 1
,65 #prints A

Goto

!2 #loop
!1 #loop

End

: #end
count thisisnotexecuted
thisisnotexecuted100
.thisisnotexecuted

Syntax

An Extended Backus-Naur Form (EBNF) description shall be adduced for the language:

program          := { innerLine } , [ lastLine ] ;
innerLine        := lineContent , newlines ;
lastLine         := lineContent ;
lineContent      := padding , [ command ] , [ comment ] ;
comment          := "#" , { character - newline } ;
command          := initCommand
                 |  addCommand
                 |  subtractCommand
                 |  resetCommand
                 |  printCharCommand
                 |  printNumCommand
                 |  jumpCommand
                 |  haltCommand
                 ;
initCommand      := "count" , spacing , counterName ;
addCommand       := counterName , operand ;
subtractCommand  := counterName , "-" , operand ;
resetCommand     := counterName , "-" ;
printCharCommand := "," , operand ;
printNumCommand  := "." , operand ;
jumpCommand      := "!" , operand ;
haltCommand      := ":" ;

operand          := unsignedInteger | counterName ;
unsignedInteger  := digit  , { digit  } ;
counterName      := letter , { letter } ;

padding          := { space } ;
spacing          := space , { space } ;
newlines         := newline , { newline } ;
newline          := "\n" ;
space            := " " ;

Examples

Counting Up

The following program perpetually counts up from inclusive zero (0):

count upCounter
.upCounter
upCounter1
!2

Interpreter

  • Common Lisp implementation of the Counterlang programming language.