nl-compiler 0.1.0__py3-none-any.whl

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.
main.py ADDED
@@ -0,0 +1,6 @@
1
+ def main():
2
+ print("Hello from nlc!")
3
+
4
+
5
+ if __name__ == "__main__":
6
+ main()
@@ -0,0 +1,107 @@
1
+ Metadata-Version: 2.4
2
+ Name: nl-compiler
3
+ Version: 0.1.0
4
+ Summary: NLC - an experimental natural language compiler for demonstrating compiler concepts
5
+ Requires-Python: >=3.12
6
+ Description-Content-Type: text/markdown
7
+
8
+ # NLC — 自然语言编译器
9
+
10
+ > **N**atural **L**anguage **C**ompiler
11
+ >
12
+ > 一个实验性项目:尝试把自然语言当作编程语言,走一遍完整的编译流程,用于诠释「编译器是如何工作的」以及「自然语言与程序语言的边界在哪里」等概念。
13
+
14
+ ## 这是什么
15
+
16
+ NLC 是一个**概念验证(Proof of Concept)**性质的实验项目。它并不追求生产可用,也不追求对任意自然语言的理解能力,而是希望通过一个足够小、足够直观的例子,诠释以下概念:
17
+
18
+ - **编译流水线**:词法分析 → 语法分析 → 语义分析 → 中间表示 → 代码生成/执行,如何应用于自然语言输入;
19
+ - **文法与歧义**:自然语言的歧义性在形式文法下是如何产生、又如何被消解的;
20
+ - **抽象语法树(AST)**:一句话如何被结构化为可操作的数据;
21
+ - **从「理解」到「执行」**:把一句人类语言映射为可运行程序的本质困难与可行路径。
22
+
23
+ 简而言之:**这是一个用来讲解编译器思想的玩具,只不过它的源码是中文/英文句子,而不是 C 或 Python。**
24
+
25
+ ## 设计思路
26
+
27
+ 编译器经典结构被原样借用,仅将输入端替换为自然语言:
28
+
29
+ ```mermaid
30
+ flowchart LR
31
+ A[自然语言输入] --> B[词法分析\nLexer]
32
+ B --> C[语法分析\nParser]
33
+ C --> D[语义分析\nSemantic]
34
+ D --> E[中间表示 IR]
35
+ E --> F{后端}
36
+ F -->|解释执行| G[Interpreter]
37
+ F -->|代码生成| H[目标代码]
38
+ ```
39
+
40
+ | 阶段 | 输入 | 输出 | 在 NLC 中的难点 |
41
+ |------|------|------|-----------------|
42
+ | 词法分析 | 原始句子 | 词元序列(tokens) | 中文分词、未登录词 |
43
+ | 语法分析 | 词元序列 | AST | 自然语言文法高度递归、歧义严重 |
44
+ | 语义分析 | AST | 带类型/含义的 AST | 指代消解、隐含前提 |
45
+ | 中间表示 | 语义 AST | IR(如结构化指令) | 如何在「模糊」与「精确」之间取舍 |
46
+ | 后端 | IR | 执行结果 / 目标代码 | 把意图映射为确定的计算 |
47
+
48
+ ## 项目状态
49
+
50
+ **早期实验阶段。** 当前仓库仅包含项目骨架,编译器各阶段尚未实现——这正是实验的起点:从一个空的 `main.py` 出发,逐层构建。
51
+
52
+ ### 路线图
53
+
54
+ - [ ] 最小词法分析器(针对受控的受限自然语言)
55
+ - [ ] 基于文法的语法分析器与 AST 定义
56
+ - [ ] 一个刻意保留、随后逐步消解的歧义示例(用于演示)
57
+ - [ ] 简单 IR 与树遍历解释器
58
+ - [ ] 端到端示例:一句话 → 执行结果
59
+ - [ ] 文档:每个阶段的概念诠释与设计取舍
60
+
61
+ ## 约定的输入范围
62
+
63
+ 为了让编译流程可被完整走通,实验会把输入限制在**受限自然语言**(Controlled Natural Language)范围内:
64
+
65
+ - 固定的小词汇表(指令类动词、名词、数量词等);
66
+ - 明确的句式模板,允许少量合法变体;
67
+ - 超出范围的输入明确报错,而不是猜测。
68
+
69
+ 这与真实的 NLP 系统(追求覆盖率与鲁棒性)目标相反——NLC 追求的是**流程的清晰可诠释**。
70
+
71
+ ## 开发环境
72
+
73
+ 本项目使用 [uv](https://docs.astral.sh/uv/) 管理依赖与环境。
74
+
75
+ ```bash
76
+ # 安装依赖并创建虚拟环境
77
+ uv sync
78
+
79
+ # 运行入口
80
+ uv run main.py
81
+ ```
82
+
83
+ 要求 Python ≥ 3.12(见 `.python-version`)。
84
+
85
+ ## 目录结构
86
+
87
+ ```
88
+ .
89
+ ├── main.py # 程序入口
90
+ ├── pyproject.toml # 项目元数据(uv 管理)
91
+ └── README.md # 本文档
92
+ ```
93
+
94
+ > 目录结构将随编译器各阶段的实现而演进(如 `lexer/`、`parser/`、`ir/`、`backend/`)。
95
+
96
+ ## 非目标
97
+
98
+ 以下**不是** NLC 的目标,以免误解:
99
+
100
+ - ❌ 构建实用的自然语言理解 / 对话系统;
101
+ - ❌ 使用大模型做语义解析(本项目关注的是经典编译技术本身);
102
+ - ❌ 支持任意句式、任意领域的开放输入;
103
+ - ❌ 生产环境下的性能与健壮性。
104
+
105
+ ## 许可
106
+
107
+ 待定。
@@ -0,0 +1,5 @@
1
+ main.py,sha256=gaLo6lNJSS7SKZyNd-fTlEe1JhF8drqrHbezJRuAzsA,81
2
+ nl_compiler-0.1.0.dist-info/METADATA,sha256=7Y8IhhZZdvHs34_aiWBDCJFfUwh1BPasIFzFXv-zzKY,4167
3
+ nl_compiler-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
4
+ nl_compiler-0.1.0.dist-info/top_level.txt,sha256=ZAMgPdWghn6xTRBO6Kc3ML1y3ZrZLnjZlqbboKXc_AE,5
5
+ nl_compiler-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ main