簡體   English   中英

這個奇怪的 StringBuilder 在 ANTLR 生成的代碼中做什么?

[英]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 個字符。 他們在這里做什么有點神秘。

  • 是 ASCII 碼 2 (STX)
  • 是 ASCII 碼 3 (ETX)
  • \t 是制表符
  • \a 是換行符

https://www.rapidtables.com/code/text/ascii-table.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM