2

我的意思是,语法是如何定义的,即我怎样才能制作像这样的自己的构造?

我意识到在很多语言中,像这样的东西将被内置到编译器/规范中,所以它由编译器处理(至少我理解它是如何工作的)。

但是对于 python,到目前为止我遇到的所有东西都可以被程序员访问,所以你或多或少可以自由地做任何你想做的事情。

我将如何编写自己的foror版本while?甚至可能吗?

我没有任何实际的应用程序,所以任何 WHY 的答案?!问题只是“因为为什么不呢?” 或“好奇心”。

4

4 回答 4

3

不,你不能,不能来自 Python。您无法向该语言添加新语法。(您必须修改 Python 本身的源代码才能制作自己的自定义 Python 版本。)

请注意,迭代器协议允许您定义可以以for自定义方式使用的对象,这涵盖了编写自己的迭代语法的许多可能用例。

于 2013-07-27T19:16:47.117 回答
1

你不能做出等价的结构。for,whileif语句,它们以自己的特定语法内置于语言中。有些语言确实允许这种事情(在某种程度上),例如Scala

于 2013-07-27T19:18:04.490 回答
1

while,printfor是关键字。这意味着它们在读取代码时由 python 解析器解析,剥离任何冗余字符并产生标记。之后,词法分析器将这些标记作为输入并构建一个程序树,然后由解释器执行。也就是说,这些结构仅用作底层词汇机制的语法糖,因此从代码内部是不可见的。

于 2013-07-27T19:24:03.370 回答
1

好吧,您有几个选项可以创建自己的语法:

  1. 编写一个高阶函数,例如mapor reduce

  2. 在C级别修改python。正如您所料,与摆弄许多其他语言相比,这相对容易。有关示例,请参见本文:http: //eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/

  3. 使用调试工具或编码工具伪造它。请参阅此代码:http ://entrian.com/goto/download.html和http://timhatch.com/projects/pybraces/

  4. 使用预处理器。这是一个试图使这变得简单的项目:http ://www.fiber-space.de/langscape/doc/index.html

  5. 使用内置的 python 工具来实现类似的效果(装饰器、元类等)。

显然,这些都不是您要寻找的,但是与 smalltalk 或 lisp 不同,python 本身并没有(必然)编程,并保证在运行时公开其自己的底层执行和解析机制。

于 2013-07-27T19:51:38.257 回答