【问题标题】:C# grammar: What character is the "new line" character?C# 语法:“换行”字符是什么字符?
【发布时间】:2016-05-09 14:03:48
【问题描述】:

我正在实现我自己的 Lexer,只是看看 C# 如何处理 char 文字:https://msdn.microsoft.com/en-us/library/aa691087(v=vs.71).aspx

上面的链接中描述了 C# 字符语法
它指定“换行”字符不允许作为字符文字。
但它没有说明“换行”字符是什么。
从我的角度来看,它可能是以下之一:

  1. CR + LF(窗口)
  2. LF(unix 和 mac)
  3. CR (mac)
  4. CR ||低频 || CR + LF(全部)

因为可以在 f.e. 上创建一个文件。 mac,然后在 Windows 上编译我倾向于相信“新行”字符与案例 4 中的语法匹配。我记得 VS 曾问我是否想在某些情况下转换我的行尾以匹配 Windows 行尾。由于我们可以拒绝该选项,因此可以坚持使用文件包含的任何结尾。
有人可以确认案例 4 或告诉我我错了吗?

【问题讨论】:

  • 我在该页面(或其英文对应部分)上看不到任何提及不允许换行的内容
  • @SamiKuhmonen It sais(德语)Beliebiges Zeichen außer ' (U+0027), \ (U+005C) und einem new-line-character 翻译为 除 ' (U+0027)、\ (U+005C) 和换行符之外的任何字符
  • 这就是Environment.NewLine 存在的原因。
  • 嗯,现在我明白了。想知道我的移动浏览器首先做了什么。没有提到那个:o
  • @Will Environment.NewLine 将返回当前操作系统的字符,该字符可能不是文件中的字符(如果文件是在另一个操作系统上创建的)

标签: c# compiler-construction grammar line-endings


【解决方案1】:

确实,根据规范,它可以是 CR 或 LF,还有更多:

https://msdn.microsoft.com/en-us/library/aa664812(v=vs.71).aspx

new-line-character:
    Carriage return character (U+000D)
    Line feed character (U+000A)
    Line separator character (U+2028)
    Paragraph separator character (U+2029)

【讨论】:

  • 哈!我找不到那个规格!凉爽的!那么这是一个C规范?
  • 没有。这是 C# 规范。
  • @NoëlWidmer “C”是规范中的附录/章节名称,而不是语言
猜你喜欢
  • 2015-06-11
  • 2010-11-12
  • 1970-01-01
  • 2010-09-18
  • 2020-10-27
  • 2012-07-02
  • 2016-03-25
相关资源
最近更新 更多