使用 c# 目标时获取"An expression is too long or complex to compile"



今天早些时候我终于得到了我的完整语法,遇到了"字符串太长"的Java问题。

我知道这个问题已经解决了,但是我害怕遇到其他限制,所以我决定切换到使用c#目标。我是一个有经验的c++程序员,学习Java是为了能够使用Antlr4,切换到c#没什么大不了的,只是要学习一种新的语法。

我现在得到的消息:1>CSC:致命错误CS1647:表达式太长或太复杂,无法编译

没有提供其他信息。有人见过这个用Antlr4生成的代码吗?我在网上搜索了这条消息,但没有找到任何可以帮助的(许多引用的旧错误应该被修复)。

我的项目目前由一个.cs文件和2 .g4文件(词法分析器和解析器语法)组成。

语法相当复杂(实现IEEE标准中的语言定义)。

我最初使用Java目标实现了语法的一个子集,没有任何问题。

感谢任何指示。

这里有一些附加信息。我使用的是Visual Studio 2012。这似乎是相同的,只是我最初看到的Java问题的不同版本。

我能够创建一个示例c#文件,只包含一行:

public static readonly string _serializedATN =
    "x5x3x176x234Ax4x2tx2x4x3tx3x4x4tx4x4x5tx5x4x6t"+
    "x6x4atax4btbx4tttx4ntnx4vtvx4ftfx4rtrx4"+
    "xEtxEx4xFtxFx4x10tx10x4x11tx11x4x12tx12x4x13tx13"+
    "x4x14tx14x4x15tx15x4x16tx16x4x17tx17x4x18tx18x4x19"+
    "tx19x4x1Atx1Ax4x1Btx1Bx4x1Ctx1Cx4x1Dtx1Dx4x1Etx1E"+
    "x4x1Ftx1Fx4 t x4!t!x4"t"x4#t#x4$t$x4%t%x4&t&x4'"+
    "t'x4(t(x4)t)x4*t*x4+t+x4,t,x4-t-x4.t.x4/t/x4x30t"+
    "x30x4x31tx31x4x32tx32x4x33tx33x4x34tx34x4x35tx35"+
                 ...
                 ...
                 "x2316x231Ex2324x2328x232D";

,问题是可重复的。队伍有4400多行。c#编译器似乎无法处理这么多的concat。我试图避免从我的语言中删除关键字并使用它们创建哈希表。这可能是我目前唯一的解决办法了。

我看了一下周围,发现这可能是由于编译器抛出的"深度递归问题"。这意味着编译器在解析表达式时遇到问题,因为它太复杂了。有关详细信息,请参见生成错误:"表达式太长或太复杂而无法编译"。和http://ayende.com/blog/3528/setting-out-to-break-the-compiler。

最新更新