• Stars
    star
    1,150
  • Rank 40,561 (Top 0.8 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 4 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

粤语編程語言.The Cantonese programming language.

logo

Read this in other languages: English

pypi pypi

粵語編程語言

如果你唔識粵語或者編程,請睇5分钟边学编程边学粤语

個 Compiler 係喺我讀高中時開發嘅,所以代碼寫得好屎(宜家都係一鳩樣),歡迎各個粵語同埋編程愛好者一齊討論同貢獻!

點樣安裝?

pip install Cantonese

目錄

引言
咋咋淋臨入門
  Hello World
  賦值語句
  睇下變量嘅類型
  循環
  條件語句
  函數
  掟出異常
  斷言語句
  錯誤捕捉語句
  調用 Python 庫
  面向對象編程
  棧嘅使用
更多例子
  睇下時間
  暫停
  嚟個隨機數
  計相關系數
  仲可以機械學習?
  海龜畫圖
  迷宮遊戲仔
  各種排序同查找算法
  寫個網頁嚟睇下?
  用粵語開發一隻 App
點樣運行?
TODOs

引言

粵語編程語言係乜嘢? 佢係一門用粵語嚟同計算機溝通嘅編程語言。
喺呢隻语言度,計算機可以讀明你寫嘅粵語。所以話,你可以用粵語嚟操作(虐待)計算機。

所有關鍵字可以使用繁體, 或者簡體同繁體混合

咋咋臨入門

Hello World

用粵語寫嘅第一個程序 Hello World:

畀我睇下「"Hello World!"」點樣先?

賦值語句

讲嘢:「A」系 1
讲嘢:「B」系 2

可以用冇鳩用嚟delete變量:

冇鳩用: A,B

睇下變量嘅類型

讲嘢 「A」系 1
起底:「A」

運行結果:

<class 'int'>

循環

打印從 1 到 100:

讲嘢:「start」系 0
讲嘢:「结束」系 唔啱
落操场玩跑步
    讲嘢:「start」系「start + 1」
    畀我睇下「start」 点样先?
    如果 |start >= 100| 嘅话 -> {
        饮茶先啦
    }
玩到「结束」为止
收工

當然用 For 循環都得:

「A」从 1 行到 100
    畀我睇下「A」点样先?
行晒

條件語句

讲嘢:「A」系 2
如果 |A 系 2| 嘅话 -> {
    畀我睇下「"A 系 2"」点样先?
}
唔系 嘅话 -> {
    畀我睇下「"A 唔系 2"」点样先?
}

仲可以用match

讲嘢:「状态」係 404
match下 状态 -> {
    撞见 400 -> {
        畀我睇下「"Bad request"」点样先?
    }
    撞见 404 -> {
        畀我睇下「"Not found"」点样先?
    }
}

函数

用 Cantonese 實現嘅階乘:

<$> factorial 1 即係 => 1 搞掂
<$> factorial |项数| 即係 => 项数 * factorial(项数 - 1) 搞掂

返回最大值:

<<< int, int 收皮 :: int  >>>
$get_max |数字1, 数字2| 要做咩:
    如果 |数字1 比唔上 数字2| 嘅话 -> {
        还数「数字2」
    }
    唔系 嘅话 -> {
        还数「数字1」
    }
搞掂

調用函數:

用下 |get_max(23, 17)|

函數式编程:

$$ x -> |x * x| 搞掂 @ f
畀我睇下 |f(2)| 点样先?

運行結果:

4

掟出異常

掟个「ImportError」来睇下?

運行結果:

濑嘢: ImportError()!

斷言語句

谂下:「1 + 1 == 3」?

運行結果:

濑嘢: AssertionError()!

錯誤捕捉語句

try-except-finally:

执嘢 -> {
    讲嘢: |A| 系 |B|
}
揾到「NameError」嘅话 -> {
    畀我睇下 "揾到NameError" 点样先?
}
执手尾 -> {
    畀我睇下 "执手尾" 点样先?
    讲嘢: |A| 系 1
    讲嘢: |B| 系 1
    畀我睇下 |A, B| 点样先?
}

調用 Python 庫

使下 python_os
使下 python_math

面向對象編程

聲明對象 duck,繼承至 object,分別有兩個方法 游水 同埋 睡觉 ,仲有一個屬性 性别

咩系 |duck|?
    佢个老豆叫 |object|
    佢嘅 |性别| 系 "公"
    佢识得 |游水| -> {
        畀我睇下 "Duck is swimming" 点样先?
    }
    佢识得 |睡觉| -> {
        畀我睇下 "Duck is sleeping" 点样先?
    }
明白未啊?

調用類中嘅方法:

|duck()| -> |游水|: ||
|duck()| -> |睡觉|: ||

運行結果:

Duck is swimming
Duck is sleeping

棧嘅使用

有条仆街叫 |Deo哥|
顶你 -> |Deo哥|: 1
顶你 -> |Deo哥|: 2
顶你 -> |Deo哥|: 3
丢你 -> |Deo哥|

運行結果:

Stack: [1,2]

更多例子

顯示當前時間

使下 datetime
畀我睇下 |宜家几点()| 点样先?

運行結果:

2021-01-17 09:16:20.767191

暫停

瞓 阵先 /* 暂停2s */
瞓 5s  /* 暂停5s */

嚟個隨機數

使下 随机数
讲嘢: |A| 就 |求其啦()|

運行結果:

0.15008236307867207

計相關系數

聲明兩個 list,計相關系數:

使下 math
|2.165, 1.688, 1.651, 2.229| 拍住上 -> |A|
|2.060, 1.822, 1.834, 2.799| 拍住上 -> |B|
畀我睇下 <| A同B有几衬 |> 点样先?

運行結果:

0.8066499427138474

仲可以机器学习?

實現 KNN 算法:

使下 math
|[5, 1], [4, 0], [1, 3], [0, 4]| 拍住上 -> |数据|
|'动作片', '动作片', '科幻片', '科幻片'| 拍住上 -> |标签|
讲嘢: |K| 系 3
嗌 KNN 过嚟估下 -> |[3, 0]|

運行結果:

动作片

線性回歸:

使下 math
|300.0 , 400.0 , 400.0 , 550.0 , 720.0 , 850.0 , 900.0 , 950.0| 拍住上 -> |X|
|300.0 , 350.0 , 490.0 , 500.0 , 600.0 , 610.0 , 700.0 , 660.0| 拍住上 -> |Y|
嗌 L_REG 过嚟估下 -> |900.0|

運行結果:

Linear function is:
y=0.530960991635149x+189.75347155122432
667.6183640228585

海龜繪圖

老作一下 -> {
    首先: |画个圈(100)|
    跟住: |写隻字("Made By Cantonese\n")|
    最尾: |听我支笛()|
}

運行結果:
turtle_result

迷宮遊戲仔

代碼
運行結果:
game_result

各種排序同查找算法

寫個網頁睇下

一個簡單嘅網頁:

老作一下 {
    打标题 => [ "我嘅第一个网页" ]
    拎笔 => [ "Hello World" ]
}

運行後,打開 127.0.0.1:80 就可以睇到運行結果:

cantonese examples/web/hello_web.cantonese -to_web 

web_result

用粵語開發一隻 App

首先安裝 kivy

pip install kivy

第一隻 App HelloWord

使下 kivy
咩系 HelloApp?
    佢个老豆叫 App
    佢识得 |HelloWorld| -> {
        |同我show| 下 -> "Hello World" @ |做嘢|
        还数 |做嘢|
    }
明白未啊?

|App运行| 下 -> |HelloApp, HelloApp().HelloWorld|

App

仲有啲咩?

喺呢度睇下更多例子.

点样运行?

Cantonese 可以用多種方式運行,用自己嘅虛擬機,用 LLVM,或者翻譯成 Python 同 HTML 都得! 使用虛擬機執行(僅支援部分語句):

cantonese [-文件名] -stack_vm

查睇生產嘅指令:

cantonese [-文件名] -stack_vm -debug

使用LLVM執行 (需安装llvmliteclang, 僅支援部分語句):

cantonese [-文件名] -llvm

用 Python 虛擬機運行(環境净係支援 Python3,因为噉先至符合廣東人先進嘅思想!):

cantonese [-文件名]

將 Cantonese 轉化成 Python:

cantonese [文件名] -to_py

例如:

cantonese examples/basic/helloworld.cantonese -to_py

運行嘅結果係:

print(" Hello World! ")
exit()

生成 HTML:

cantonese examples/web/web_hello.cantonese -to_web -compile
<html>
<head>
<meta charset="utf-8" />
</head>
<title>我嘅第一个网页</title>
<h1>Hello World</h1>
</html>

Vscode插件:https://github.com/Cantonese-community/vscode-cantonese

TODOs

歡迎各個粵語同埋編程愛好者一齊討論同貢獻!為粵語文化遺產嘅保護貢獻出自己嘅一份力量!
今後要做咩:

  • 加多啲語句
  • 完善自己嘅虛擬機
  • 完全支持LLVMJIT

Copyright (C) 2020-2023 StepfenShawn