【发布时间】:2016-05-17 00:58:02
【问题描述】:
我当前的项目(实际上只是一种玩具语言)是一种功能性脚本语言。而且我想允许方法调用而不需要括号进行分组。
sum 1 2 3
这就是问题所在,老实说,我不确定这是否常见。但在我的语言中,方法可以定义执行标识符的参数。
def (a) plus (b)
a + b
end
最终会是什么
1 plus 2
但是如果我对这些参数使用变量/函数呢? 例如,我怎么知道“加号”是我正在调用的方法,而不是下面的“getnum”
getnum plus 2
此外,我怎么知道 getnum 是 plus 的参数而不是相反的参数? (仅仅是通过检查参数签名吗?) 编辑:我只是重复了自己。哎呀。
最后,词法分析器应该为这种事情做一些特别的事情吗?如果是这样,IT 怎么知道应该调用哪个“方法令牌”?还是词法分析器只是将诸如“Identifiertoken”和“literaltoken”之类的东西抽出来,并留给运行时来确定它是一个方法调用?
【问题讨论】:
-
更糟糕的是,如果
getnum和plus是 both 函数怎么办?一般来说,听起来你的语法会模棱两可。 -
我的意思是,如果你有
def f (x)和def (x) g,那么f g应该解决什么问题? -
我猜嵌套函数调用必须使用括号(或其他一些分组字符集),除非它可以根据 getnum 不带参数的事实来确定。
-
我猜你必须建立运算符优先级来定义哪个运算符先行。与
1 + 2 * 3在数学中的工作方式相同,没有括号。 -
这不是词法分析问题。这是一个解析问题。词法分析器不知道要调用哪个标识符“methodtoken”。它只是抽出诸如“Identifiertoken”和“literaltoken”之类的东西。解析器必须判断它是否是一个方法调用。
标签: parsing functional-programming language-design lexical-analysis