【问题标题】:Poster with the 8 phases of translation in the C languageC语言翻译8个阶段的海报
【发布时间】:2010-12-01 09:42:37
【问题描述】:

有没有人参考海报/单页 pdf 或类似的东西,其中列出了 C 语言翻译的八个阶段(第一个是三字翻译)?我想在我的电脑旁边的墙上挂一个印刷品。

更新:很抱歉忘记指定。我对 C90 感兴趣(尽管 C99 可能非常接近,_Pragma 如pmg 的答案中提到的那样是C99 特定的,我想避免这种情况)。

【问题讨论】:

    标签: c


    【解决方案1】:

    胜利的 ASCII 艺术:

                           ANSI C translation phases
                           =========================
    
              +-------------------------------------------------+
              | map physical characters to source character set |
              |     replace line terminators with newlines      |
              |           decode trigraph sequences             |
              +-------------------------------------------------+
                                       |
                                       V
                   +---------------------------------------+
                   | join lines along trailing backslashes |
                   +---------------------------------------+
                                       |
                                       V
         +-------------------------------------------------------------+
         | decompose into preprocessing tokens and whitespace/comments |
         |                      strip comments                         |
         |                      retain newlines                        |
         +-------------------------------------------------------------+        
                                       |
                                       V
              +------------------------------------------------+
              | execute preprocessing directives/invoke macros |
              |              process included files            |
              +------------------------------------------------+
                                       |
                                       V
       +----------------------------------------------------------------+
       | decode escape sequences in character constants/string literals |
       +----------------------------------------------------------------+
                                       |
                                       V
                    +--------------------------------------+
                    | concatenate adjacent string literals |
                    +--------------------------------------+
                                       |
                                       V
                  +------------------------------------------+
                  | convert preprocessing tokens to C tokens |
                  |       analyze and translate tokens       |
                  +------------------------------------------+
                                       |
                                       V
                        +-----------------------------+
                        | resolve external references |
                        |        link libraries       |
                        |      build program image    |
                        +-----------------------------+
    

    【讨论】:

    • 我希望有一些更“完善”的东西(最好包括三合字母序列的列表等),但是这个可以完成工作。如果有人有他们认为更好的东西,我可能会考虑切换已接受的答案,因此请继续添加答案。
    • 这太棒了,非常简单,而且被低估了。 +2!
    【解决方案2】:

    几乎直接来自the most current draft of the revised C99 standard;我做了一些重新格式化。
    做一个打印屏幕,你就准备好了。

    5.1.1.2 Translation phases
    
    1 The precedence among the syntax rules of translation is specified by the following
    phases. (*5)
        1. Physical source file multibyte characters are mapped, in an implementation
           defined manner, to the source character set (introducing new-line characters for
           end-of-line indicators) if necessary. Trigraph sequences are replaced by
           corresponding single-character internal representations.
        2. Each instance of a backslash character (\) immediately followed by a new-line
           character is deleted, splicing physical source lines to form logical source lines.
           Only the last backslash on any physical source line shall be eligible for being part
           of such a splice. A source file that is not empty shall end in a new-line character,
           which shall not be immediately preceded by a backslash character before any such
           splicing takes place.
        3. The source file is decomposed into preprocessing tokens (*6) and sequences of
           white-space characters (including comments). A source file shall not end in a
           partial preprocessing token or in a partial comment. Each comment is replaced by
           one space character. New-line characters are retained. Whether each nonempty
           sequence of white-space characters other than new-line is retained or replaced by
           one space character is implementation-defined.
        4. Preprocessing directives are executed, macro invocations are expanded, and
           _Pragma unary operator expressions are executed. If a character sequence that
           matches the syntax of a universal character name is produced by token
           concatenation (6.10.3.3), the behavior is undefined. A #include preprocessing
           directive causes the named header or source file to be processed from phase 1
           through phase 4, recursively. All preprocessing directives are then deleted.
        5. Each source character set member and escape sequence in character constants and
           string literals is converted to the corresponding member of the execution character
           set; if there is no corresponding member, it is converted to an implementation-defined
           member other than the null (wide) character. (*7)
        6. Adjacent string literal tokens are concatenated.
        7. White-space characters separating tokens are no longer significant. Each
           preprocessing token is converted into a token. The resulting tokens are
           syntactically and semantically analyzed and translated as a translation unit.
        8. All external object and function references are resolved. Library components are
           linked to satisfy external references to functions and objects not defined in the
           current translation. All such translator output is collected into a program image
           which contains information needed for execution in its execution environment.
    
    (*5) Implementations shall behave as if these separate phases occur, even though many are typically folded
         together in practice. Source files, translation units, and translated translation units need not
         necessarily be stored as files, nor need there be any one-to-one correspondence between these entities
         and any external representation. The description is conceptual only, and does not specify any
         particular implementation.
    (*6) Adjacent string literal tokens are concatenated.
    (*7) White-space characters separating tokens are no longer significant. Each
         preprocessing token is converted into a token. The resulting tokens are
         syntactically and semantically analyzed and translated as a translation unit.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多