PyUMSN 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyumsn-1.0.0/LICENSE +21 -0
- pyumsn-1.0.0/PKG-INFO +278 -0
- pyumsn-1.0.0/PyUMSN.egg-info/PKG-INFO +278 -0
- pyumsn-1.0.0/PyUMSN.egg-info/SOURCES.txt +25 -0
- pyumsn-1.0.0/PyUMSN.egg-info/dependency_links.txt +1 -0
- pyumsn-1.0.0/PyUMSN.egg-info/entry_points.txt +2 -0
- pyumsn-1.0.0/PyUMSN.egg-info/requires.txt +12 -0
- pyumsn-1.0.0/PyUMSN.egg-info/top_level.txt +1 -0
- pyumsn-1.0.0/README.md +244 -0
- pyumsn-1.0.0/pyproject.toml +51 -0
- pyumsn-1.0.0/pyumsn/__init__.py +35 -0
- pyumsn-1.0.0/pyumsn/__main__.py +5 -0
- pyumsn-1.0.0/pyumsn/cli.py +258 -0
- pyumsn-1.0.0/pyumsn/errors.py +75 -0
- pyumsn-1.0.0/pyumsn/ide/umsn_ide.umsn +1269 -0
- pyumsn-1.0.0/pyumsn/importer.py +70 -0
- pyumsn-1.0.0/pyumsn/launcher.py +223 -0
- pyumsn-1.0.0/pyumsn/lexer.py +422 -0
- pyumsn-1.0.0/pyumsn/repl.py +32 -0
- pyumsn-1.0.0/pyumsn/runner.py +118 -0
- pyumsn-1.0.0/pyumsn/sourceio.py +53 -0
- pyumsn-1.0.0/pyumsn/translator.py +393 -0
- pyumsn-1.0.0/pyumsn/vocab.py +949 -0
- pyumsn-1.0.0/setup.cfg +4 -0
- pyumsn-1.0.0/tests/test_cli.py +184 -0
- pyumsn-1.0.0/tests/test_translator.py +193 -0
- pyumsn-1.0.0/tests/test_vocab.py +62 -0
pyumsn-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 hyjys
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
pyumsn-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyUMSN
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: 엄슨(UMSN) 프로그래밍 언어 — 엄슨 ↔ 파이썬 변환기, 실행기, UMSN-IDE
|
|
5
|
+
Author: hyjys
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/hyjys/UMSN-Lang
|
|
8
|
+
Project-URL: Source, https://github.com/hyjys/UMSN-Lang
|
|
9
|
+
Project-URL: Issues, https://github.com/hyjys/UMSN-Lang/issues
|
|
10
|
+
Keywords: umsn,엄슨,esolang,korean,programming-language,transpiler
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Natural Language :: Korean
|
|
17
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
18
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
19
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
20
|
+
Classifier: Topic :: Education
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Provides-Extra: libs
|
|
25
|
+
Requires-Dist: numpy; extra == "libs"
|
|
26
|
+
Requires-Dist: pandas; extra == "libs"
|
|
27
|
+
Requires-Dist: matplotlib; extra == "libs"
|
|
28
|
+
Provides-Extra: test
|
|
29
|
+
Requires-Dist: pytest; extra == "test"
|
|
30
|
+
Provides-Extra: release
|
|
31
|
+
Requires-Dist: build; extra == "release"
|
|
32
|
+
Requires-Dist: twine; extra == "release"
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# 엄슨(UMSN) 프로그래밍 언어
|
|
36
|
+
|
|
37
|
+
> 우리 학교 유행어 **'엄슨'** 으로 만든 프로그래밍 언어. 파이썬과 1:1로 대응되어 서로 변환할 수 있고,
|
|
38
|
+
> 파이썬 라이브러리를 그대로 쓸 수 있습니다.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
엄슨하다 인사..하이름..다..한
|
|
42
|
+
엄슨한 형"안녕, {이름}! 엄슨!"
|
|
43
|
+
|
|
44
|
+
엄슨마다 번호 엄속 엄범위..하1..고 4..다..한
|
|
45
|
+
어엄슨 번호 ..나머지 2 ..같슨 0..한
|
|
46
|
+
엄!..하번호..고 "짝수"..다
|
|
47
|
+
슨엄..한
|
|
48
|
+
엄!..하번호..고 "홀수"..다
|
|
49
|
+
|
|
50
|
+
엄!..하인사..하"엄슨"..다..다
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
위 코드는 아래 파이썬 코드와 **완전히 같습니다** (줄 번호까지 같음).
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
def 인사(이름):
|
|
57
|
+
return f"안녕, {이름}! 엄슨!"
|
|
58
|
+
|
|
59
|
+
for 번호 in range(1, 4):
|
|
60
|
+
if 번호 % 2 == 0:
|
|
61
|
+
print(번호, "짝수")
|
|
62
|
+
else:
|
|
63
|
+
print(번호, "홀수")
|
|
64
|
+
|
|
65
|
+
print(인사("엄슨"))
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+

|
|
69
|
+
|
|
70
|
+
## 구성
|
|
71
|
+
|
|
72
|
+
| 이름 | 설명 |
|
|
73
|
+
|---|---|
|
|
74
|
+
| **엄슨 언어** (`.umsn`) | 파이썬의 예약어·내장 함수·메소드·문장부호를 엄슨 단어로 바꾼 언어 |
|
|
75
|
+
| **PyUMSN** (`pip` 패키지, 모듈 `pyumsn`) | 엄슨 ↔ 파이썬 변환기, 실행기, import 지원, 대화형 셸 |
|
|
76
|
+
| **`pyumsn`** (명령줄) | `run` / `topy` / `toumsn` / `check` / `ide` / `repl` / `words` |
|
|
77
|
+
| **UMSN-IDE** | **엄슨 언어로 작성된** Tkinter IDE ([`pyumsn/ide/umsn_ide.umsn`](pyumsn/ide/umsn_ide.umsn)) |
|
|
78
|
+
|
|
79
|
+
윈도우와 리눅스를 지원합니다 (파이썬 3.11 이상).
|
|
80
|
+
|
|
81
|
+
## 설치
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install PyUMSN # PyPI 에서 (기본, 의존성 없음)
|
|
85
|
+
pip install "PyUMSN[libs]" # numpy, pandas, matplotlib 까지
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
소스에서 설치하려면:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
git clone https://github.com/hyjys/UMSN-Lang.git
|
|
92
|
+
cd UMSN-Lang
|
|
93
|
+
pip install .
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- IDE 와 Tkinter 예제에는 Tkinter 가 필요합니다. 윈도우용 파이썬에는 기본으로 들어 있고,
|
|
97
|
+
리눅스에서는 `sudo apt install python3-tk` (데비안/우분투) 처럼 설치하세요.
|
|
98
|
+
- 한글 글꼴(D2Coding, 나눔고딕코딩, 맑은 고딕, Noto Sans CJK KR 중 하나)이 있으면 IDE 가 자동으로 씁니다.
|
|
99
|
+
|
|
100
|
+
## 명령줄 도구 `pyumsn`
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
pyumsn run 안녕.umsn [인자...] # 엄슨 실행 (임시 .py 를 만들어 실행 → 끝나면 삭제)
|
|
104
|
+
pyumsn 안녕.umsn # run 줄임
|
|
105
|
+
pyumsn run --keep 안녕.umsn # 임시 .py 를 남김 / --show-py : 변환된 코드 먼저 보기
|
|
106
|
+
pyumsn topy 안녕.umsn # 엄슨 → 파이썬 (안녕.py)
|
|
107
|
+
pyumsn topy 폴더/ -o 출력폴더/ # 폴더째 변환, -o - 는 화면으로
|
|
108
|
+
pyumsn toumsn hello.py # 파이썬 → 엄슨 (hello.umsn)
|
|
109
|
+
pyumsn toumsn hello.py --keep-symbols # 기호( ) : , 는 ASCII 그대로 (순한맛)
|
|
110
|
+
pyumsn check 안녕.umsn # 영어 이름 등 검사
|
|
111
|
+
pyumsn ide [파일.umsn] # UMSN-IDE
|
|
112
|
+
pyumsn repl # 엄슨 대화형 셸 (엄>>>)
|
|
113
|
+
pyumsn words -s print # 단어장 검색
|
|
114
|
+
pyumsn words --translit polyfit # 영어 이름 → 엄슨 음역
|
|
115
|
+
pyumsn words --markdown # 전체 단어장 (docs/VOCABULARY.md)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`python -m pyumsn ...` 으로도 똑같이 쓸 수 있습니다.
|
|
119
|
+
|
|
120
|
+
## 문법
|
|
121
|
+
|
|
122
|
+
### 1. 단어 바꾸기
|
|
123
|
+
|
|
124
|
+
파이썬 예약어·내장 함수·자주 쓰는 메소드는 전부 엄슨 단어가 있습니다. 전체 목록: [docs/VOCABULARY.md](docs/VOCABULARY.md)
|
|
125
|
+
|
|
126
|
+
| 엄슨 | 파이썬 | 엄슨 | 파이썬 |
|
|
127
|
+
|---|---|---|---|
|
|
128
|
+
| `엄슨하다` | `def` | `엄!` | `print` |
|
|
129
|
+
| `어엄슨` | `if` | `엄?` | `input` |
|
|
130
|
+
| `슨엄어엄슨` | `elif` | `엄범위` | `range` |
|
|
131
|
+
| `슨엄` | `else` | `엄길이` | `len` |
|
|
132
|
+
| `엄슨한` | `return` | `엄목록` | `list` |
|
|
133
|
+
| `엄슨마다` | `for` | `엄슨` | `self` |
|
|
134
|
+
| `엄슨동안` | `while` | `__엄슨시작__` | `__init__` |
|
|
135
|
+
| `엄속` | `in` | `엄붙여` | `.append` |
|
|
136
|
+
| `엄슨틀` | `class` | `엄쪼개` | `.split` |
|
|
137
|
+
| `엄슨가져와` / `엄에서` / `엄으로` | `import` / `from` / `as` | `엄예외` | `Exception` |
|
|
138
|
+
| `엄슨참` / `슨엄거짓` / `엄없슨` | `True` / `False` / `None` | `엄값오류` | `ValueError` |
|
|
139
|
+
| `엄시도` / `엄슨예외` / `엄마침내` | `try` / `except` / `finally` | `어엄` | `lambda` |
|
|
140
|
+
| `엄그리고` / `엄또는` / `안엄슨` | `and` / `or` / `not` | `엄` | `pass` |
|
|
141
|
+
|
|
142
|
+
### 2. 문장부호 → `..` 기호어
|
|
143
|
+
|
|
144
|
+
`..` 뒤에 한글을 붙이면 기호가 됩니다. 앞말에 붙여 써도 됩니다.
|
|
145
|
+
|
|
146
|
+
| 엄슨 | 파이썬 | 엄슨 | 파이썬 | 엄슨 | 파이썬 |
|
|
147
|
+
|---|---|---|---|---|---|
|
|
148
|
+
| `..하` | `(` | `..다` | `)` | `..하다` | `()` |
|
|
149
|
+
| `..엄` | `[` | `..슨` | `]` | `..엄슨` | `[]` |
|
|
150
|
+
| `..어엄` | `{` | `..어슨` | `}` | `..어엄슨` | `{}` |
|
|
151
|
+
| `..한` | `:` | `..고` | `,` | `..은` | `=` |
|
|
152
|
+
| `..더해` | `+` | `..빼` | `-` | `..곱해` | `*` |
|
|
153
|
+
| `..나눠` | `/` | `..몫` | `//` | `..나머지` | `%` |
|
|
154
|
+
| `..같슨` | `==` | `..다르슨` | `!=` | `..크슨` / `..작슨` | `>` / `<` |
|
|
155
|
+
| `..더해은` | `+=` | `..화살` | `->` | `..바다코끼리` | `:=` |
|
|
156
|
+
|
|
157
|
+
- 속성 접근 `.` 과 `...` 은 그대로 씁니다: `엄슨.이름`.
|
|
158
|
+
- 기호어는 가장 긴 것부터 읽습니다. `..하` 뒤에 `다`로 시작하는 이름이 오면 띄어 쓰세요 (`f..하 다음..다`).
|
|
159
|
+
- ASCII 기호 `( ) : , =` 도 그대로 쓸 수 있습니다 (`pyumsn toumsn --keep-symbols` 결과).
|
|
160
|
+
|
|
161
|
+
### 3. 한글 전용 규칙 — 영어 이름 금지
|
|
162
|
+
|
|
163
|
+
엄슨 코드(문자열·주석 밖)의 **모든 이름은 한글·숫자·`_` 만** 쓸 수 있습니다. `print`, `count`, `점수x` 처럼
|
|
164
|
+
영문자가 섞인 이름은 변환기(`topy`)·실행기(`run`)·IDE 가 **실행 전에 거부**합니다.
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
엄슨 문법 오류 (영어.umsn 2줄 1칸): 영어 이름 'count' 는 쓸 수 없슨! 한글 이름을 쓰거나 '엄세어' 를 쓰세요.
|
|
168
|
+
count ..은 점수 ..더해 1
|
|
169
|
+
^^^^^
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
단어장에 없는 영어 이름(라이브러리 함수 등)은 **음역**으로 씁니다. 표지 `외_` 뒤에 알파벳을 한 글자씩
|
|
173
|
+
한글로 적고(대문자는 앞에 `대`), 숫자와 `_` 는 그대로 둡니다. 음역은 원래 이름으로 정확히 되돌아갑니다.
|
|
174
|
+
|
|
175
|
+
| a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
|
|
176
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
177
|
+
| 아 | 브 | 크 | 드 | 에 | 프 | 그 | 흐 | 이 | 즈 | 키 | 르 | 므 | 느 | 오 | 피 | 쿠 | 러 | 스 | 트 | 우 | 뷔 | 워 | 엑 | 야 | 지 |
|
|
178
|
+
|
|
179
|
+
예: `넘엄.외_피오르야프이트(...)` = `np.polyfit(...)`. `pyumsn words --translit 이름` 이나 IDE 의 **도움말 → 음역 도구**를 쓰면 편합니다.
|
|
180
|
+
|
|
181
|
+
파이썬 → 엄슨 변환(`toumsn`)은 사전에 없는 영어 이름을 자동으로 음역하므로, 결과는 항상 이 규칙을 지킵니다.
|
|
182
|
+
한글 이름이 엄슨 단어와 겹치면 `$엄슨` 처럼 `$` 를 붙여 "그냥 이름"으로 씁니다.
|
|
183
|
+
|
|
184
|
+
### 4. 문자열·주석·docstring 은 그대로
|
|
185
|
+
|
|
186
|
+
따옴표 안의 글자, `#` 주석, docstring 은 한 글자도 바뀌지 않습니다. 문자열 접두사만 한글로 씁니다.
|
|
187
|
+
|
|
188
|
+
| 엄슨 | 파이썬 |
|
|
189
|
+
|---|---|
|
|
190
|
+
| `형"안녕 {이름}"` | `f"안녕 {이름}"` (중괄호 안은 엄슨 코드) |
|
|
191
|
+
| `날"\d+"` | `r"\d+"` |
|
|
192
|
+
| `바"..."` / `유"..."` | `b"..."` / `u"..."` |
|
|
193
|
+
| `형날"..."`, `날바"..."`, `대형"..."` | `fr"..."`, `rb"..."`, `F"..."` |
|
|
194
|
+
|
|
195
|
+
### 5. UTF-8 전용
|
|
196
|
+
|
|
197
|
+
엄슨은 **무조건 UTF-8** 만 씁니다. UTF-8 이 아닌 파일(CP949, UTF-16 등)이나 다른 인코딩 선언이 있는 파일은
|
|
198
|
+
추측하지 않고 거부합니다. 모든 출력 파일은 BOM 없는 UTF-8 이고, 실행되는 프로그램도 UTF-8 모드
|
|
199
|
+
(`PYTHONUTF8=1`)로 돌아가서 윈도우 콘솔에서도 한글이 깨지지 않습니다.
|
|
200
|
+
|
|
201
|
+
## 파이썬 라이브러리 쓰기
|
|
202
|
+
|
|
203
|
+
모든 파이썬 라이브러리를 `엄슨가져와` 로 쓸 수 있고, 자주 쓰는 라이브러리는 `라이브러리 이름 + 엄슨` 단어가 있습니다.
|
|
204
|
+
|
|
205
|
+
| 엄슨 | 파이썬 | 자주 쓰는 단어 예 |
|
|
206
|
+
|---|---|---|
|
|
207
|
+
| `티킨터엄슨` (`티엄`) | `tkinter` (`tk`) | `창엄슨`=Tk, `버튼엄슨`=Button, `라벨엄슨`=Label, `배치엄슨`=pack, `엄슨루프`=mainloop, `글엄슨`=text, `명령엄슨`=command |
|
|
208
|
+
| `넘파이엄슨` (`넘엄`) | `numpy` (`np`) | `배열엄슨`=array, `영배열엄슨`=zeros, `범위배열엄슨`=arange, `평균엄슨`=mean, `모양바꿔엄슨`=reshape |
|
|
209
|
+
| `판다스엄슨` (`판엄`) | `pandas` (`pd`) | `데이터프레임엄슨`=DataFrame, `씨에스브이읽어엄슨`=read_csv, `머리엄슨`=head, `묶어보기엄슨`=groupby |
|
|
210
|
+
| `맷플롯립엄슨`, `파이플롯엄슨` (`플엄`) | `matplotlib`, `pyplot` (`plt`) | `그려엄슨`=plot, `보여엄슨`=show, `가로이름엄슨`=xlabel, `범례엄슨`=legend |
|
|
211
|
+
| `수학엄슨`, `랜덤엄슨`, `운영체제엄슨`, `시스템엄슨`, `시간엄슨`, `제이슨엄슨`, `거북엄슨` … | `math`, `random`, `os`, `sys`, `time`, `json`, `turtle` … | `제곱근엄슨`=sqrt, `랜덤정수엄슨`=randint, `잠자엄슨`=sleep |
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
엄슨가져와 넘파이엄슨 엄으로 넘엄
|
|
215
|
+
배열 ..은 넘엄.배열엄슨..하..엄1..고 2..고 3..슨..다
|
|
216
|
+
엄!..하넘엄.평균엄슨..하배열..다..다
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
`.umsn` 파일끼리도 import 됩니다: `엄슨가져와 계산기` → 같은 폴더의 `계산기.umsn`.
|
|
220
|
+
|
|
221
|
+
예제: [`examples/`](examples) — 안녕, 구구단, 클래스, 넘파이, 판다스, 맷플롯, 티킨터 계산기.
|
|
222
|
+
|
|
223
|
+
## UMSN-IDE
|
|
224
|
+
|
|
225
|
+
`pyumsn ide` 로 실행합니다. IDE 자체가 엄슨 언어로 작성되어 있습니다 ([`pyumsn/ide/umsn_ide.umsn`](pyumsn/ide/umsn_ide.umsn)).
|
|
226
|
+
|
|
227
|
+
- **엄슨 구문 강조** — 예약어, 내장 함수, 라이브러리 단어, `..` 기호어, `엄!`, 음역어, 문자열, 주석, 숫자를 색으로 구분
|
|
228
|
+
- **실시간 한글 전용 검사** — 영어 이름에 빨간 밑줄, 오른쪽 클릭 → 사전 단어/음역으로 바꾸기
|
|
229
|
+
- **`엄슨!` 버튼 (F5)** — 실행 결과가 아래 콘솔에 실시간 표시, `입력 ▸` 칸으로 `엄?`(input) 에 답하기, `■ 멈춰` (Shift+F5)
|
|
230
|
+
- 오류 줄 클릭 → 해당 줄로 이동, 오류 메시지는 엄슨 이름으로 (예: `엄영나누기오류`)
|
|
231
|
+
- 줄 번호, 현재 줄 강조, 괄호 짝 표시 (`..하`/`..다` 포함), 자동 들여쓰기 (`..한` 뒤), Tab/Shift+Tab, 주석 토글 (Ctrl+/)
|
|
232
|
+
- 여러 탭, 새로 만들기/열기/저장, 최근 파일, 저장 안 한 변경 경고
|
|
233
|
+
- 자동 완성 (Ctrl+Space), 엄슨 단어장 패널 (F1, 검색 + 두 번 눌러 넣기)
|
|
234
|
+
- 파이썬 코드 보기 (F6), 엄슨 검사 (F7), `.py` 가져오기/내보내기
|
|
235
|
+
- 찾기/바꾸기 (Ctrl+F), 줄로 이동 (Ctrl+G), 어두운/밝은 테마 (F9), 글자 크기 (Ctrl +/−, Ctrl+휠)
|
|
236
|
+
|
|
237
|
+
## 파이썬에서 쓰기
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
import pyumsn
|
|
241
|
+
|
|
242
|
+
pyumsn.umsn_to_py('엄!..하"안녕"..다') # 'print("안녕")'
|
|
243
|
+
pyumsn.py_to_umsn('print("안녕")') # '엄!..하"안녕"..다'
|
|
244
|
+
pyumsn.check_umsn("count ..은 1") # [(1, 0, 5, "영어 이름 'count' 는 ...")]
|
|
245
|
+
pyumsn.run_file("안녕.umsn") # 실행, 종료 코드 반환
|
|
246
|
+
pyumsn.install_import_hook() # import 로 .umsn 모듈 불러오기
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## 동작 방식
|
|
250
|
+
|
|
251
|
+
- 변환은 **토큰 단위**입니다. 문자열·주석은 원문 그대로, 이름·기호만 사전으로 바꿉니다. 그래서 줄 번호가 그대로라
|
|
252
|
+
오류 위치가 엄슨 파일의 줄과 정확히 맞습니다.
|
|
253
|
+
- `pyumsn run` 은 엄슨을 파이썬으로 바꿔 **임시 `.py` 파일**을 만들고, 그것을 원래 `.umsn` 파일 이름으로 실행합니다.
|
|
254
|
+
그래서 오류 추적 기록에 엄슨 소스 줄이 보입니다. 임시 파일은 실행이 시작되면 바로 지워집니다 (`--keep` 으로 보존).
|
|
255
|
+
- 파이썬 → 엄슨 → 파이썬 왕복은 원문과 같습니다 (기호어가 붙어서 헷갈릴 때만 공백 한 칸이 들어감).
|
|
256
|
+
테스트에서 파이썬 표준 라이브러리 파일들로 확인합니다.
|
|
257
|
+
|
|
258
|
+
## 개발
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
pip install -e ".[test]"
|
|
262
|
+
python -m pytest
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### PyPI 배포
|
|
266
|
+
|
|
267
|
+
1. `pyumsn/__init__.py` 의 `__version__` 을 올린다 (예: `1.0.1`). 같은 버전은 PyPI 에 다시 올릴 수 없다.
|
|
268
|
+
2. `main` 에 병합한 뒤 GitHub 에서 **Release** 를 만든다. 태그는 `v` + 버전 (예: `v1.0.1`).
|
|
269
|
+
3. `.github/workflows/publish.yml` 이 테스트 → 빌드 → PyPI 업로드를 자동으로 한다 (Trusted Publishing, 토큰 불필요).
|
|
270
|
+
TestPyPI 로 먼저 시험하려면 Actions 탭에서 **Publish** 워크플로를 수동 실행하고 `testpypi` 를 고른다.
|
|
271
|
+
|
|
272
|
+
손으로 올릴 때는 `pip install -e ".[release]"`, `python -m build`, `twine check dist/*`, `twine upload dist/*`.
|
|
273
|
+
|
|
274
|
+
IDE 의 한국어 입력(IME)은 운영체제의 Tk 지원에 따릅니다.
|
|
275
|
+
|
|
276
|
+
## 라이선스
|
|
277
|
+
|
|
278
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: PyUMSN
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: 엄슨(UMSN) 프로그래밍 언어 — 엄슨 ↔ 파이썬 변환기, 실행기, UMSN-IDE
|
|
5
|
+
Author: hyjys
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/hyjys/UMSN-Lang
|
|
8
|
+
Project-URL: Source, https://github.com/hyjys/UMSN-Lang
|
|
9
|
+
Project-URL: Issues, https://github.com/hyjys/UMSN-Lang/issues
|
|
10
|
+
Keywords: umsn,엄슨,esolang,korean,programming-language,transpiler
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Natural Language :: Korean
|
|
17
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
18
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
19
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
20
|
+
Classifier: Topic :: Education
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Provides-Extra: libs
|
|
25
|
+
Requires-Dist: numpy; extra == "libs"
|
|
26
|
+
Requires-Dist: pandas; extra == "libs"
|
|
27
|
+
Requires-Dist: matplotlib; extra == "libs"
|
|
28
|
+
Provides-Extra: test
|
|
29
|
+
Requires-Dist: pytest; extra == "test"
|
|
30
|
+
Provides-Extra: release
|
|
31
|
+
Requires-Dist: build; extra == "release"
|
|
32
|
+
Requires-Dist: twine; extra == "release"
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# 엄슨(UMSN) 프로그래밍 언어
|
|
36
|
+
|
|
37
|
+
> 우리 학교 유행어 **'엄슨'** 으로 만든 프로그래밍 언어. 파이썬과 1:1로 대응되어 서로 변환할 수 있고,
|
|
38
|
+
> 파이썬 라이브러리를 그대로 쓸 수 있습니다.
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
엄슨하다 인사..하이름..다..한
|
|
42
|
+
엄슨한 형"안녕, {이름}! 엄슨!"
|
|
43
|
+
|
|
44
|
+
엄슨마다 번호 엄속 엄범위..하1..고 4..다..한
|
|
45
|
+
어엄슨 번호 ..나머지 2 ..같슨 0..한
|
|
46
|
+
엄!..하번호..고 "짝수"..다
|
|
47
|
+
슨엄..한
|
|
48
|
+
엄!..하번호..고 "홀수"..다
|
|
49
|
+
|
|
50
|
+
엄!..하인사..하"엄슨"..다..다
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
위 코드는 아래 파이썬 코드와 **완전히 같습니다** (줄 번호까지 같음).
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
def 인사(이름):
|
|
57
|
+
return f"안녕, {이름}! 엄슨!"
|
|
58
|
+
|
|
59
|
+
for 번호 in range(1, 4):
|
|
60
|
+
if 번호 % 2 == 0:
|
|
61
|
+
print(번호, "짝수")
|
|
62
|
+
else:
|
|
63
|
+
print(번호, "홀수")
|
|
64
|
+
|
|
65
|
+
print(인사("엄슨"))
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+

|
|
69
|
+
|
|
70
|
+
## 구성
|
|
71
|
+
|
|
72
|
+
| 이름 | 설명 |
|
|
73
|
+
|---|---|
|
|
74
|
+
| **엄슨 언어** (`.umsn`) | 파이썬의 예약어·내장 함수·메소드·문장부호를 엄슨 단어로 바꾼 언어 |
|
|
75
|
+
| **PyUMSN** (`pip` 패키지, 모듈 `pyumsn`) | 엄슨 ↔ 파이썬 변환기, 실행기, import 지원, 대화형 셸 |
|
|
76
|
+
| **`pyumsn`** (명령줄) | `run` / `topy` / `toumsn` / `check` / `ide` / `repl` / `words` |
|
|
77
|
+
| **UMSN-IDE** | **엄슨 언어로 작성된** Tkinter IDE ([`pyumsn/ide/umsn_ide.umsn`](pyumsn/ide/umsn_ide.umsn)) |
|
|
78
|
+
|
|
79
|
+
윈도우와 리눅스를 지원합니다 (파이썬 3.11 이상).
|
|
80
|
+
|
|
81
|
+
## 설치
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install PyUMSN # PyPI 에서 (기본, 의존성 없음)
|
|
85
|
+
pip install "PyUMSN[libs]" # numpy, pandas, matplotlib 까지
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
소스에서 설치하려면:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
git clone https://github.com/hyjys/UMSN-Lang.git
|
|
92
|
+
cd UMSN-Lang
|
|
93
|
+
pip install .
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
- IDE 와 Tkinter 예제에는 Tkinter 가 필요합니다. 윈도우용 파이썬에는 기본으로 들어 있고,
|
|
97
|
+
리눅스에서는 `sudo apt install python3-tk` (데비안/우분투) 처럼 설치하세요.
|
|
98
|
+
- 한글 글꼴(D2Coding, 나눔고딕코딩, 맑은 고딕, Noto Sans CJK KR 중 하나)이 있으면 IDE 가 자동으로 씁니다.
|
|
99
|
+
|
|
100
|
+
## 명령줄 도구 `pyumsn`
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
pyumsn run 안녕.umsn [인자...] # 엄슨 실행 (임시 .py 를 만들어 실행 → 끝나면 삭제)
|
|
104
|
+
pyumsn 안녕.umsn # run 줄임
|
|
105
|
+
pyumsn run --keep 안녕.umsn # 임시 .py 를 남김 / --show-py : 변환된 코드 먼저 보기
|
|
106
|
+
pyumsn topy 안녕.umsn # 엄슨 → 파이썬 (안녕.py)
|
|
107
|
+
pyumsn topy 폴더/ -o 출력폴더/ # 폴더째 변환, -o - 는 화면으로
|
|
108
|
+
pyumsn toumsn hello.py # 파이썬 → 엄슨 (hello.umsn)
|
|
109
|
+
pyumsn toumsn hello.py --keep-symbols # 기호( ) : , 는 ASCII 그대로 (순한맛)
|
|
110
|
+
pyumsn check 안녕.umsn # 영어 이름 등 검사
|
|
111
|
+
pyumsn ide [파일.umsn] # UMSN-IDE
|
|
112
|
+
pyumsn repl # 엄슨 대화형 셸 (엄>>>)
|
|
113
|
+
pyumsn words -s print # 단어장 검색
|
|
114
|
+
pyumsn words --translit polyfit # 영어 이름 → 엄슨 음역
|
|
115
|
+
pyumsn words --markdown # 전체 단어장 (docs/VOCABULARY.md)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`python -m pyumsn ...` 으로도 똑같이 쓸 수 있습니다.
|
|
119
|
+
|
|
120
|
+
## 문법
|
|
121
|
+
|
|
122
|
+
### 1. 단어 바꾸기
|
|
123
|
+
|
|
124
|
+
파이썬 예약어·내장 함수·자주 쓰는 메소드는 전부 엄슨 단어가 있습니다. 전체 목록: [docs/VOCABULARY.md](docs/VOCABULARY.md)
|
|
125
|
+
|
|
126
|
+
| 엄슨 | 파이썬 | 엄슨 | 파이썬 |
|
|
127
|
+
|---|---|---|---|
|
|
128
|
+
| `엄슨하다` | `def` | `엄!` | `print` |
|
|
129
|
+
| `어엄슨` | `if` | `엄?` | `input` |
|
|
130
|
+
| `슨엄어엄슨` | `elif` | `엄범위` | `range` |
|
|
131
|
+
| `슨엄` | `else` | `엄길이` | `len` |
|
|
132
|
+
| `엄슨한` | `return` | `엄목록` | `list` |
|
|
133
|
+
| `엄슨마다` | `for` | `엄슨` | `self` |
|
|
134
|
+
| `엄슨동안` | `while` | `__엄슨시작__` | `__init__` |
|
|
135
|
+
| `엄속` | `in` | `엄붙여` | `.append` |
|
|
136
|
+
| `엄슨틀` | `class` | `엄쪼개` | `.split` |
|
|
137
|
+
| `엄슨가져와` / `엄에서` / `엄으로` | `import` / `from` / `as` | `엄예외` | `Exception` |
|
|
138
|
+
| `엄슨참` / `슨엄거짓` / `엄없슨` | `True` / `False` / `None` | `엄값오류` | `ValueError` |
|
|
139
|
+
| `엄시도` / `엄슨예외` / `엄마침내` | `try` / `except` / `finally` | `어엄` | `lambda` |
|
|
140
|
+
| `엄그리고` / `엄또는` / `안엄슨` | `and` / `or` / `not` | `엄` | `pass` |
|
|
141
|
+
|
|
142
|
+
### 2. 문장부호 → `..` 기호어
|
|
143
|
+
|
|
144
|
+
`..` 뒤에 한글을 붙이면 기호가 됩니다. 앞말에 붙여 써도 됩니다.
|
|
145
|
+
|
|
146
|
+
| 엄슨 | 파이썬 | 엄슨 | 파이썬 | 엄슨 | 파이썬 |
|
|
147
|
+
|---|---|---|---|---|---|
|
|
148
|
+
| `..하` | `(` | `..다` | `)` | `..하다` | `()` |
|
|
149
|
+
| `..엄` | `[` | `..슨` | `]` | `..엄슨` | `[]` |
|
|
150
|
+
| `..어엄` | `{` | `..어슨` | `}` | `..어엄슨` | `{}` |
|
|
151
|
+
| `..한` | `:` | `..고` | `,` | `..은` | `=` |
|
|
152
|
+
| `..더해` | `+` | `..빼` | `-` | `..곱해` | `*` |
|
|
153
|
+
| `..나눠` | `/` | `..몫` | `//` | `..나머지` | `%` |
|
|
154
|
+
| `..같슨` | `==` | `..다르슨` | `!=` | `..크슨` / `..작슨` | `>` / `<` |
|
|
155
|
+
| `..더해은` | `+=` | `..화살` | `->` | `..바다코끼리` | `:=` |
|
|
156
|
+
|
|
157
|
+
- 속성 접근 `.` 과 `...` 은 그대로 씁니다: `엄슨.이름`.
|
|
158
|
+
- 기호어는 가장 긴 것부터 읽습니다. `..하` 뒤에 `다`로 시작하는 이름이 오면 띄어 쓰세요 (`f..하 다음..다`).
|
|
159
|
+
- ASCII 기호 `( ) : , =` 도 그대로 쓸 수 있습니다 (`pyumsn toumsn --keep-symbols` 결과).
|
|
160
|
+
|
|
161
|
+
### 3. 한글 전용 규칙 — 영어 이름 금지
|
|
162
|
+
|
|
163
|
+
엄슨 코드(문자열·주석 밖)의 **모든 이름은 한글·숫자·`_` 만** 쓸 수 있습니다. `print`, `count`, `점수x` 처럼
|
|
164
|
+
영문자가 섞인 이름은 변환기(`topy`)·실행기(`run`)·IDE 가 **실행 전에 거부**합니다.
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
엄슨 문법 오류 (영어.umsn 2줄 1칸): 영어 이름 'count' 는 쓸 수 없슨! 한글 이름을 쓰거나 '엄세어' 를 쓰세요.
|
|
168
|
+
count ..은 점수 ..더해 1
|
|
169
|
+
^^^^^
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
단어장에 없는 영어 이름(라이브러리 함수 등)은 **음역**으로 씁니다. 표지 `외_` 뒤에 알파벳을 한 글자씩
|
|
173
|
+
한글로 적고(대문자는 앞에 `대`), 숫자와 `_` 는 그대로 둡니다. 음역은 원래 이름으로 정확히 되돌아갑니다.
|
|
174
|
+
|
|
175
|
+
| a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
|
|
176
|
+
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
177
|
+
| 아 | 브 | 크 | 드 | 에 | 프 | 그 | 흐 | 이 | 즈 | 키 | 르 | 므 | 느 | 오 | 피 | 쿠 | 러 | 스 | 트 | 우 | 뷔 | 워 | 엑 | 야 | 지 |
|
|
178
|
+
|
|
179
|
+
예: `넘엄.외_피오르야프이트(...)` = `np.polyfit(...)`. `pyumsn words --translit 이름` 이나 IDE 의 **도움말 → 음역 도구**를 쓰면 편합니다.
|
|
180
|
+
|
|
181
|
+
파이썬 → 엄슨 변환(`toumsn`)은 사전에 없는 영어 이름을 자동으로 음역하므로, 결과는 항상 이 규칙을 지킵니다.
|
|
182
|
+
한글 이름이 엄슨 단어와 겹치면 `$엄슨` 처럼 `$` 를 붙여 "그냥 이름"으로 씁니다.
|
|
183
|
+
|
|
184
|
+
### 4. 문자열·주석·docstring 은 그대로
|
|
185
|
+
|
|
186
|
+
따옴표 안의 글자, `#` 주석, docstring 은 한 글자도 바뀌지 않습니다. 문자열 접두사만 한글로 씁니다.
|
|
187
|
+
|
|
188
|
+
| 엄슨 | 파이썬 |
|
|
189
|
+
|---|---|
|
|
190
|
+
| `형"안녕 {이름}"` | `f"안녕 {이름}"` (중괄호 안은 엄슨 코드) |
|
|
191
|
+
| `날"\d+"` | `r"\d+"` |
|
|
192
|
+
| `바"..."` / `유"..."` | `b"..."` / `u"..."` |
|
|
193
|
+
| `형날"..."`, `날바"..."`, `대형"..."` | `fr"..."`, `rb"..."`, `F"..."` |
|
|
194
|
+
|
|
195
|
+
### 5. UTF-8 전용
|
|
196
|
+
|
|
197
|
+
엄슨은 **무조건 UTF-8** 만 씁니다. UTF-8 이 아닌 파일(CP949, UTF-16 등)이나 다른 인코딩 선언이 있는 파일은
|
|
198
|
+
추측하지 않고 거부합니다. 모든 출력 파일은 BOM 없는 UTF-8 이고, 실행되는 프로그램도 UTF-8 모드
|
|
199
|
+
(`PYTHONUTF8=1`)로 돌아가서 윈도우 콘솔에서도 한글이 깨지지 않습니다.
|
|
200
|
+
|
|
201
|
+
## 파이썬 라이브러리 쓰기
|
|
202
|
+
|
|
203
|
+
모든 파이썬 라이브러리를 `엄슨가져와` 로 쓸 수 있고, 자주 쓰는 라이브러리는 `라이브러리 이름 + 엄슨` 단어가 있습니다.
|
|
204
|
+
|
|
205
|
+
| 엄슨 | 파이썬 | 자주 쓰는 단어 예 |
|
|
206
|
+
|---|---|---|
|
|
207
|
+
| `티킨터엄슨` (`티엄`) | `tkinter` (`tk`) | `창엄슨`=Tk, `버튼엄슨`=Button, `라벨엄슨`=Label, `배치엄슨`=pack, `엄슨루프`=mainloop, `글엄슨`=text, `명령엄슨`=command |
|
|
208
|
+
| `넘파이엄슨` (`넘엄`) | `numpy` (`np`) | `배열엄슨`=array, `영배열엄슨`=zeros, `범위배열엄슨`=arange, `평균엄슨`=mean, `모양바꿔엄슨`=reshape |
|
|
209
|
+
| `판다스엄슨` (`판엄`) | `pandas` (`pd`) | `데이터프레임엄슨`=DataFrame, `씨에스브이읽어엄슨`=read_csv, `머리엄슨`=head, `묶어보기엄슨`=groupby |
|
|
210
|
+
| `맷플롯립엄슨`, `파이플롯엄슨` (`플엄`) | `matplotlib`, `pyplot` (`plt`) | `그려엄슨`=plot, `보여엄슨`=show, `가로이름엄슨`=xlabel, `범례엄슨`=legend |
|
|
211
|
+
| `수학엄슨`, `랜덤엄슨`, `운영체제엄슨`, `시스템엄슨`, `시간엄슨`, `제이슨엄슨`, `거북엄슨` … | `math`, `random`, `os`, `sys`, `time`, `json`, `turtle` … | `제곱근엄슨`=sqrt, `랜덤정수엄슨`=randint, `잠자엄슨`=sleep |
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
엄슨가져와 넘파이엄슨 엄으로 넘엄
|
|
215
|
+
배열 ..은 넘엄.배열엄슨..하..엄1..고 2..고 3..슨..다
|
|
216
|
+
엄!..하넘엄.평균엄슨..하배열..다..다
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
`.umsn` 파일끼리도 import 됩니다: `엄슨가져와 계산기` → 같은 폴더의 `계산기.umsn`.
|
|
220
|
+
|
|
221
|
+
예제: [`examples/`](examples) — 안녕, 구구단, 클래스, 넘파이, 판다스, 맷플롯, 티킨터 계산기.
|
|
222
|
+
|
|
223
|
+
## UMSN-IDE
|
|
224
|
+
|
|
225
|
+
`pyumsn ide` 로 실행합니다. IDE 자체가 엄슨 언어로 작성되어 있습니다 ([`pyumsn/ide/umsn_ide.umsn`](pyumsn/ide/umsn_ide.umsn)).
|
|
226
|
+
|
|
227
|
+
- **엄슨 구문 강조** — 예약어, 내장 함수, 라이브러리 단어, `..` 기호어, `엄!`, 음역어, 문자열, 주석, 숫자를 색으로 구분
|
|
228
|
+
- **실시간 한글 전용 검사** — 영어 이름에 빨간 밑줄, 오른쪽 클릭 → 사전 단어/음역으로 바꾸기
|
|
229
|
+
- **`엄슨!` 버튼 (F5)** — 실행 결과가 아래 콘솔에 실시간 표시, `입력 ▸` 칸으로 `엄?`(input) 에 답하기, `■ 멈춰` (Shift+F5)
|
|
230
|
+
- 오류 줄 클릭 → 해당 줄로 이동, 오류 메시지는 엄슨 이름으로 (예: `엄영나누기오류`)
|
|
231
|
+
- 줄 번호, 현재 줄 강조, 괄호 짝 표시 (`..하`/`..다` 포함), 자동 들여쓰기 (`..한` 뒤), Tab/Shift+Tab, 주석 토글 (Ctrl+/)
|
|
232
|
+
- 여러 탭, 새로 만들기/열기/저장, 최근 파일, 저장 안 한 변경 경고
|
|
233
|
+
- 자동 완성 (Ctrl+Space), 엄슨 단어장 패널 (F1, 검색 + 두 번 눌러 넣기)
|
|
234
|
+
- 파이썬 코드 보기 (F6), 엄슨 검사 (F7), `.py` 가져오기/내보내기
|
|
235
|
+
- 찾기/바꾸기 (Ctrl+F), 줄로 이동 (Ctrl+G), 어두운/밝은 테마 (F9), 글자 크기 (Ctrl +/−, Ctrl+휠)
|
|
236
|
+
|
|
237
|
+
## 파이썬에서 쓰기
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
import pyumsn
|
|
241
|
+
|
|
242
|
+
pyumsn.umsn_to_py('엄!..하"안녕"..다') # 'print("안녕")'
|
|
243
|
+
pyumsn.py_to_umsn('print("안녕")') # '엄!..하"안녕"..다'
|
|
244
|
+
pyumsn.check_umsn("count ..은 1") # [(1, 0, 5, "영어 이름 'count' 는 ...")]
|
|
245
|
+
pyumsn.run_file("안녕.umsn") # 실행, 종료 코드 반환
|
|
246
|
+
pyumsn.install_import_hook() # import 로 .umsn 모듈 불러오기
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## 동작 방식
|
|
250
|
+
|
|
251
|
+
- 변환은 **토큰 단위**입니다. 문자열·주석은 원문 그대로, 이름·기호만 사전으로 바꿉니다. 그래서 줄 번호가 그대로라
|
|
252
|
+
오류 위치가 엄슨 파일의 줄과 정확히 맞습니다.
|
|
253
|
+
- `pyumsn run` 은 엄슨을 파이썬으로 바꿔 **임시 `.py` 파일**을 만들고, 그것을 원래 `.umsn` 파일 이름으로 실행합니다.
|
|
254
|
+
그래서 오류 추적 기록에 엄슨 소스 줄이 보입니다. 임시 파일은 실행이 시작되면 바로 지워집니다 (`--keep` 으로 보존).
|
|
255
|
+
- 파이썬 → 엄슨 → 파이썬 왕복은 원문과 같습니다 (기호어가 붙어서 헷갈릴 때만 공백 한 칸이 들어감).
|
|
256
|
+
테스트에서 파이썬 표준 라이브러리 파일들로 확인합니다.
|
|
257
|
+
|
|
258
|
+
## 개발
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
pip install -e ".[test]"
|
|
262
|
+
python -m pytest
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### PyPI 배포
|
|
266
|
+
|
|
267
|
+
1. `pyumsn/__init__.py` 의 `__version__` 을 올린다 (예: `1.0.1`). 같은 버전은 PyPI 에 다시 올릴 수 없다.
|
|
268
|
+
2. `main` 에 병합한 뒤 GitHub 에서 **Release** 를 만든다. 태그는 `v` + 버전 (예: `v1.0.1`).
|
|
269
|
+
3. `.github/workflows/publish.yml` 이 테스트 → 빌드 → PyPI 업로드를 자동으로 한다 (Trusted Publishing, 토큰 불필요).
|
|
270
|
+
TestPyPI 로 먼저 시험하려면 Actions 탭에서 **Publish** 워크플로를 수동 실행하고 `testpypi` 를 고른다.
|
|
271
|
+
|
|
272
|
+
손으로 올릴 때는 `pip install -e ".[release]"`, `python -m build`, `twine check dist/*`, `twine upload dist/*`.
|
|
273
|
+
|
|
274
|
+
IDE 의 한국어 입력(IME)은 운영체제의 Tk 지원에 따릅니다.
|
|
275
|
+
|
|
276
|
+
## 라이선스
|
|
277
|
+
|
|
278
|
+
[MIT License](LICENSE)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
PyUMSN.egg-info/PKG-INFO
|
|
5
|
+
PyUMSN.egg-info/SOURCES.txt
|
|
6
|
+
PyUMSN.egg-info/dependency_links.txt
|
|
7
|
+
PyUMSN.egg-info/entry_points.txt
|
|
8
|
+
PyUMSN.egg-info/requires.txt
|
|
9
|
+
PyUMSN.egg-info/top_level.txt
|
|
10
|
+
pyumsn/__init__.py
|
|
11
|
+
pyumsn/__main__.py
|
|
12
|
+
pyumsn/cli.py
|
|
13
|
+
pyumsn/errors.py
|
|
14
|
+
pyumsn/importer.py
|
|
15
|
+
pyumsn/launcher.py
|
|
16
|
+
pyumsn/lexer.py
|
|
17
|
+
pyumsn/repl.py
|
|
18
|
+
pyumsn/runner.py
|
|
19
|
+
pyumsn/sourceio.py
|
|
20
|
+
pyumsn/translator.py
|
|
21
|
+
pyumsn/vocab.py
|
|
22
|
+
pyumsn/ide/umsn_ide.umsn
|
|
23
|
+
tests/test_cli.py
|
|
24
|
+
tests/test_translator.py
|
|
25
|
+
tests/test_vocab.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pyumsn
|