我的意思是,语法是如何定义的,即我怎样才能制作像这样的自己的构造?
我意识到在很多语言中,像这样的东西将被内置到编译器/规范中,所以它由编译器处理(至少我理解它是如何工作的)。
但是对于 python,到目前为止我遇到的所有东西都可以被程序员访问,所以你或多或少可以自由地做任何你想做的事情。
我将如何编写自己的for
or版本while
?甚至可能吗?
我没有任何实际的应用程序,所以任何 WHY 的答案?!问题只是“因为为什么不呢?” 或“好奇心”。
我的意思是,语法是如何定义的,即我怎样才能制作像这样的自己的构造?
我意识到在很多语言中,像这样的东西将被内置到编译器/规范中,所以它由编译器处理(至少我理解它是如何工作的)。
但是对于 python,到目前为止我遇到的所有东西都可以被程序员访问,所以你或多或少可以自由地做任何你想做的事情。
我将如何编写自己的for
or版本while
?甚至可能吗?
我没有任何实际的应用程序,所以任何 WHY 的答案?!问题只是“因为为什么不呢?” 或“好奇心”。
不,你不能,不能来自 Python。您无法向该语言添加新语法。(您必须修改 Python 本身的源代码才能制作自己的自定义 Python 版本。)
请注意,迭代器协议允许您定义可以以for
自定义方式使用的对象,这涵盖了编写自己的迭代语法的许多可能用例。
while
,print
等for
是关键字。这意味着它们在读取代码时由 python 解析器解析,剥离任何冗余字符并产生标记。之后,词法分析器将这些标记作为输入并构建一个程序树,然后由解释器执行。也就是说,这些结构仅用作底层词汇机制的语法糖,因此从代码内部是不可见的。
好吧,您有几个选项可以创建自己的语法:
编写一个高阶函数,例如map
or reduce
。
在C级别修改python。正如您所料,与摆弄许多其他语言相比,这相对容易。有关示例,请参见本文:http: //eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/
使用调试工具或编码工具伪造它。请参阅此代码:http ://entrian.com/goto/download.html和http://timhatch.com/projects/pybraces/
使用预处理器。这是一个试图使这变得简单的项目:http ://www.fiber-space.de/langscape/doc/index.html
使用内置的 python 工具来实现类似的效果(装饰器、元类等)。
显然,这些都不是您要寻找的,但是与 smalltalk 或 lisp 不同,python 本身并没有(必然)编程,并保证在运行时公开其自己的底层执行和解析机制。