GITHUB: https://github.com/Ansari-Codes/custom-syntax-for-python
PYPI: https://pypi.org/project/csp-lang/
CSPLang is a high-speed, symbolic syntactic wrapper for Python. It transforms a compact, symbol-heavy DSL into executable Python code. Designed with the principle of "Write less, do more," CSPLang turns Python's keyword-heavy structure into a sleek, streamlined experience.
The CSPLang Philosophy: What if you had the full power of the Python ecosystem, but with the minimalist elegance of a functional language?
- Recursive One-Liners: Define functions, loops, and conditions all on a single line.
- Context-Aware Parsing: Intelligently distinguishes between logic colons and data colons (like in dictionaries or list slices).
- Symbolic Identity: Replaces verbose keywords (
def,while,return) with intuitive symbols ($,>>,->). - Zero-Overhead Integration: Use any Python library (
numpy,tqdm,asyncio) out of the box.
# Clone and Install
git clone https://github.com/Ansari-Codes/custom-syntax-for-python.git
cd custom-syntax-for-python
pip install .pip install git+https://github.com/Ansari-Codes/custom-syntax-for-python.gitpip install csp-langUse the "flow" operator <- for assignment.
name <- `Abubakar`
age <- 19
data <- [1, 2, 3]Forget f"", "", or ''' '''. Use backticks for everything. They support multiple lines and escaped backticks (`).
msg <- `This is a
multi-line string with a \`backtick\` inside.`
# F-strings work naturally:
print(f`Hello, {name}!`)No need to type if. A standalone condition ending in a colon is automatically treated as a conditional.
x <- 10
x > 5: # This is 'if'
print(`Large`)
: x == 5: # This is 'elif'
print(`Medium`)
: # This is 'else'
print(`Small`)
# NEW: One-liners are now supported!
x == 10: print(`Perfect Score`)- While: Use
>> - For: Use
=>(where:replacesin)
# While Loop
count <- 3
>> count > 0:
print(count)
count <- count - 1
# For Loop
=> i:range(3):
print(f`Iteration {i}`)Defined using $ and []. The -> symbol acts as the return.
# Standard definition
$add[a, b]:
-> a + b
# Works inside classes too!
class Math:
$cube[self, n]:
-> n ** 3Because CSPLang v2.0 uses a Recursive Split Strategy, it can handle complex Python constructs mixed with CSP symbols without breaking.
# Slicing and Dictionaries work perfectly!
data <- [10, 20, 30, 40]
subset <- data[1:3] # Transpiler ignores the slice colon
results <- {`val`: subset[0]} # Transpiler ignores the dict colon
# Complex nesting and one-lining
$check[n]:
>> n > 0:
n%2==0:
print("Even: ", n)
:n%2!=0: print("Odd: ", n)
:print(n in [1, 2, 3, 4][:2])
n <- n - 1
check(10)| Command | Description |
|---|---|
csp run file.csp |
Transpiles and executes immediately. |
csp transpile file.csp -o out.py |
Converts CSP to a standalone Python file. |
csp test |
Runs the internal test suite. |

