小编Pet*_*ter的帖子

Haskell - 如何最好地表示编程语言的语法?

我一直在研究Haskell,我非常想在其中编写一个编译器(作为一种学习练习),因为它的许多先天特性可以很容易地应用于编译器(特别是一个递归的体面编译器).

我无法理解的是如何用Haskell-ian方式表示语言的语法.我的第一个想法是使用递归数据类型定义,但我无法看到我如何使用它们来匹配语言中的关键字("if").

非常感谢的想法和建议,

皮特

compiler-construction grammar haskell representation

21
推荐指数
2
解决办法
5422
查看次数

Pythonic实现tokenizer的方法

我将在Python中实现一个tokenizer,我想知道你是否可以提供一些样式建议?

我之前在C和Java中实现了一个标记化器,所以我对理论很好,我只想确保我遵循pythonic样式和最佳实践.

列出令牌类型:

例如,在Java中,我会有一个像这样的字段列表:

public static final int TOKEN_INTEGER = 0
Run Code Online (Sandbox Code Playgroud)

但是,显然,我没有办法(我认为)在Python中声明一个常量变量,所以我可以用普通的变量声明替换它,但这并没有让我成为一个很好的解决方案,因为声明可能会被改变.

从Tokenizer返回令牌:

有没有更好的替代方案,只需返回一个元组列表,例如

[ (TOKEN_INTEGER, 17), (TOKEN_STRING, "Sixteen")]?
Run Code Online (Sandbox Code Playgroud)

干杯,

皮特

python coding-style tokenize

12
推荐指数
4
解决办法
1万
查看次数

这个语法用于实例化一个类有什么特别的原因吗?

我想知道是否有人知道一个特定的原因(除了纯粹的风格)为什么以下语言这些语法启动一个类?

蟒蛇:

class MyClass:
    def __init__(self):

x = MyClass()
Run Code Online (Sandbox Code Playgroud)

红宝石:

class AnotherClass
    def initialize()
    end
end

x = AnotherClass.new()
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么用于构造函数的语法和用于实际获取类的实例的语法是如此不同.当然,我知道它并没有真正有所作为,但是,例如,在ruby中,使构造函数"new()"有什么问题?

ruby python constructor

0
推荐指数
1
解决办法
385
查看次数