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.
喵谕 Meaoiu
Meaoiu (喵谕) is a cat-themed esoteric programming language. Designed with Chinese keywords, its syntax heavily(maybe) revolves around feline behaviors.
Despite its esoteric and highly stylized nature, Meaoiu provides a suite of modern language features, including a built-in formatting tool, static diagnostics, and a Language Server Protocol (LSP) implementation.
Language Concepts
The Tail (~)
Every valid statement must be terminated with a ~ (This is like ; in most programming languages).
蹭甲~ (Valid, in pseudo code it is "var a;") 蹭乙 (Syntax Error: Missing tail)
Data Types
Meaoiu supports several basic data types, referred to as "Toys" (玩具):
- Number (摸数): IEEE 754 double-precision floating-point numbers. (Note that there's no negative number literal but you can use
0-xto get -x) - String (闲话): Character strings wrapped in single or double quotes.
- Boolean (好坏):
好喵(Good Meow / True) and坏喵(Bad Meow / False). - Null (空碗):
空碗(Empty Bowl), representing nothing. - Collection (纸箱): Arrays/Dictionaries, represented as Cardboard Boxes
[= =]. - Function (计谋): Functions or Schemes. This is not a "Toy".
Variables and Memory Semantics
Variables are declared using the keyword 蹭 (Rub). Meaoiu explicitly differentiates between reference, copy, and move assignments using different keywords:
| Keyword | Action | Description |
|---|---|---|
就是 (Is) |
Reference | Both variables point to the same memory space. |
就像 (Is like) |
Copy | Creates a shallow copy of the data for the new variable. |
才是 (Is only/truly) |
Move | Moves the data to the new variable, disable the original one. |
Syntax and Commands
Arithmetic and Chained Operations
Meaoiu supports basic arithmetic (+, -, *, /). It also features a unique "Sequence Operator" (分节运算) using commas to chain arithmetic evaluations from left to right without needing parentheses:
10+2*3 -, 7 *, 2~ (Evaluates to ((10 + 2 * 3) - 7) * 2)
Logic Gates
Logical operations use a self-closing pair syntax. Opening and closing keywords must strictly match:
| Open | Close | Equivalent to |
|---|---|---|
和 (And) |
都好 (All good) |
AND |
和 (And) |
都坏 (All bad) |
NOR |
或 (Or) |
不坏 (Not bad) |
OR |
或 (Or) |
不好 (Not good) |
NAND |
Example: a 和 b 都好~ means a && b.
Control Flow
Code blocks ("Thoughts") are wrapped in [# #]. The last expression in the block is its return value.
- If/Else: Evaluated using
好不好?(Good or not?) and不然(Otherwise). Note that the condition comes after the block.
[# 扒[='Too big'=]喵~ #] 好不好? x > 5
不然 [# 扒[='Too small'=]喵~ #]~ (printLn('Too big') if x > 5 else printLn('Too small'))
- Loops: Initiated with
玩耍(Play). You can break out using累了(Tired) or continue/return early using偷袭(Ambush).
Functions
Functions are declared using 想要 (Want), followed by arguments in a box [= =], the function name, and the body in [# #]. To return a value, use 叼回来 (Bring back). (want some items to do something)
The only way to use a declared function is to use 扒 (Paw at) followed by arguments in [= =] and the function name to call it. You can't assign it to another variable or use it as an argument.
(Declaration)
想要 [=n=] 双倍 [#
叼回来 n * 2~
#]~
(Call)
扒[=5=]双倍~
Built-in Functions
Meaoiu comes with several built-in functions that can be called directly:
扒[= 'Text' =]喵~: Print to stdout.扒[= 'Prompt' =]祈求~: Read input from stdin.扒[= 秒数 =]打盹~: Sleep for X seconds. If X is 0 then halt until keystroke.扒[= A, B =]添乱~: Generate a random integer between A and B.扒[= '开心' =]猫咪艺术~: Print an ASCII cat face.
Examples
Hello, World!
扒[='Hello, World!'=]喵~
Sgn Machine
蹭 齉~
(* Don't ask me why I used such a complicated character; the answer is just to avoid keywords.* )
(* Also, please ignore the content inside the parentheses and asterisk combinations; *)
(* that's just a comment and shouldn't appear in the program. *)
齉 就是 扒[= 'Please enter a number: ' =]祈求~
[# 扒[='1'=]喵~ #] 好不好? x > 0
不然 [#
[# 扒[='-1'=]喵~ #] 好不好? x < 0
不然 [#
玩耍 [# 扒[='0'=]喵~ #]~
#]~
#]~
Fibonacci (Recursion)
想要 [=n=] 斐波那契 [#
[# 叼回来 1~ #] 好不好? n <= 1
不然 [# 叼回来 扒[=n - 1=]斐波那契~ + 扒[=n - 2=]斐波那契~ #]~
#]~
扒[="The 5th term of the Fibonacci sequence is: ", 扒[=5=]斐波那契=]喵~
Factorial (Recursion)
想要 [=n=] 阶乘 [#
[# 叼回来 1~ #] 好不好? n <= 1
不然 [# 叼回来 n * 扒[=n - 1=]阶乘~ #]~
#]~
扒[="The factorial of 5 is: ", 扒[=5=]阶乘=]喵~
Number Guessing Game
想要 [==] 猜数字 [#
蹭 答案~ 答案 就是 扒[=1, 100=]添乱~
扒[="I'm thinking of a number between 1 and 100 meow~"=]喵~
玩耍 [#
蹭 输入 就是 扒[='Guess: '=]祈求~
蹭猜测就是扒[=输入=]变摸数~ (Spaces between words are not necessary)
[# 扒[="Please enter a number meow:"=]喵~ #] 好不好? 猜测 == 空碗
不然 [#
[# 扒[="Too small meow~"=]喵~ #] 好不好? 猜测 < 答案
不然 [# 扒[="Too big meow~"=]喵~ #] 好不好? 猜测 > 答案
不然 [#
扒[="Correct! You are a genius cat meow~"=]喵~
累了~
#]~
#]~
#]~
#]~
扒[==]猜数字~
External resources
- Meaoiu on GitHub - The interpreter, parser, and language server API source code.
- Web Interpreter - Try Meaoiu online.