[英]What is this strange StringBuilder doing in ANTLR-generated code?
我正在嘗試學習如何在 Unity 中使用 Antlr4。 我在其他程序的 class ActionLexer 中看到了代碼
private static string _serializeATN()
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("\u0003а훑輿괭䐗껱趀ꫝ\u0002\u000e");
stringBuilder.Append("\u00a0\b\u0001\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t\u0004\u0004\u0005\t\u0005\u0004\u0006");
stringBuilder.Append("\t\u0006\u0004\a\t\a\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\v\t\v\u0004\f\t\f");
stringBuilder.Append("\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010\u0004\u0011\t\u0011\u0004");
stringBuilder.Append("\u0012\t\u0012\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003\u0005\u0003\u0005\u0003");
stringBuilder.Append("\u0006\u0003\u0006\u0003\a\u0003\a\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b");
...
return stringBuilder.ToString();
}
然后我統一復制了該代碼並進行了調試。 結果是奇怪的字符串。
+ stringBuilder "а훑輿괭䐗껱趀ꫝ \b\t\t\t\t\t\a\t\a\b\t\b\t\t\t\n\t\n\v\t\v\f\t\f" System.Text.StringBuilder
我想知道為什么會這樣。 這個 function 的作用是什么?
ATN是ATN解釋器用來執行parser + lexer state機器的internal.network(Augmented Transition Network)。 這個結構是由 ANTLR 根據給定的語法生成的,並且是 ANTLR 實現的整個機制的核心。
生成的解析器和詞法分析器需要它們的 ATN 才能正常工作。 但由於生成的文件是文本,因此有必要將 generated.network 序列化為文本字符串,以便能夠將其寫入生成的文件。 然后在解析應用程序啟動時對該字符串進行反序列化,以在 memory 中重新生成原始 ATN。簡而言之:它本身不是文本,而是以文本形式存儲的二進制數據。
ATN 屬於解析器/詞法分析器實現的內部,在大多數情況下您可以安全地忽略它。
您正在查看不可打印的 unicode 個字符。 他們在這里做什么有點神秘。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.