Tag: lalr

是C#的lambdaexpression式语法LALR(1)?

我希望问的问题在标题中得到了肯定。 让我举一个有关语法的例子: identifier_list : identifier | identifier_list identifier; lambda_arguments : '(' identifier_list ')' | identifier; lambda : lambda_arguments '=>' expression 然后我们添加正常的C语言expression语法 – 特别是, primary_expression : '(' expression ')' | identifier | lambda; 真正的问题是,这个语法LALR(1)是可parsing的,即能够被自动parsing器生成器parsing吗? 还是需要手动滚动或GLRparsing器? 请注意,我希望具体了解这一小节,而不是上下文相关的关键字或其他部分。 我现在想的是,如果parsing器看到'(' identifier ')' ,这有两个有效的parsing,所以如果parsing器看到identifier ,向前看')' ,它将无法决定parsing树下去。 这可能只是一个转换/减less冲突,但是,我可以通过分配一些任意优先级(可能有利于'(' identifier ')' )来消除。 编辑:其实,我正在考虑用新语言中的这个语法分段来窃取类似的function。 我已经有类似于JavaScript的匿名函数的语法forms,但是我的天竺鼠吱吱声反馈抱怨说他们对于很多用途来说太冗长了,并且指出C#lambdaexpression式是更理想的解决scheme。 我担心这个解决scheme可能导致模糊。 所以,真的,我只对这一部分感兴趣。 其他类似generics和演员对我来说不是问题。 以前版本的语法是机械可分解的,我不想失去这个属性,而我之前使用机械发生器的经验告诉我,最好在这里检查一下,而不是尝试自己。 对于我的手滚parsing器,我当然可以简单地使用特殊情况'(' identifier比正常情况稍微向前看一些。