You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
4.8KB

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <title>Languages (GNU Compiler Collection (GCC) Internals)</title>
  21. <meta name="description" content="Languages (GNU Compiler Collection (GCC) Internals)">
  22. <meta name="keywords" content="Languages (GNU Compiler Collection (GCC) Internals)">
  23. <meta name="resource-type" content="document">
  24. <meta name="distribution" content="global">
  25. <meta name="Generator" content="makeinfo">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="index.html#Top" rel="up" title="Top">
  30. <link href="Source-Tree.html#Source-Tree" rel="next" title="Source Tree">
  31. <link href="Miscellaneous-routines.html#Miscellaneous-routines" rel="prev" title="Miscellaneous routines">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.indentedblock {margin-right: 0em}
  36. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  37. blockquote.smallquotation {font-size: smaller}
  38. div.display {margin-left: 3.2em}
  39. div.example {margin-left: 3.2em}
  40. div.lisp {margin-left: 3.2em}
  41. div.smalldisplay {margin-left: 3.2em}
  42. div.smallexample {margin-left: 3.2em}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style: oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nolinebreak {white-space: nowrap}
  54. span.roman {font-family: initial; font-weight: normal}
  55. span.sansserif {font-family: sans-serif; font-weight: normal}
  56. ul.no-bullet {list-style: none}
  57. -->
  58. </style>
  59. </head>
  60. <body lang="en">
  61. <a name="Languages"></a>
  62. <div class="header">
  63. <p>
  64. Next: <a href="Source-Tree.html#Source-Tree" accesskey="n" rel="next">Source Tree</a>, Previous: <a href="Libgcc.html#Libgcc" accesskey="p" rel="prev">Libgcc</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  65. </div>
  66. <hr>
  67. <a name="Language-Front-Ends-in-GCC"></a>
  68. <h2 class="chapter">5 Language Front Ends in GCC</h2>
  69. <p>The interface to front ends for languages in GCC, and in particular
  70. the <code>tree</code> structure (see <a href="GENERIC.html#GENERIC">GENERIC</a>), was initially designed for
  71. C, and many aspects of it are still somewhat biased towards C and
  72. C-like languages. It is, however, reasonably well suited to other
  73. procedural languages, and front ends for many such languages have been
  74. written for GCC.
  75. </p>
  76. <p>Writing a compiler as a front end for GCC, rather than compiling
  77. directly to assembler or generating C code which is then compiled by
  78. GCC, has several advantages:
  79. </p>
  80. <ul>
  81. <li> GCC front ends benefit from the support for many different
  82. target machines already present in GCC.
  83. </li><li> GCC front ends benefit from all the optimizations in GCC. Some
  84. of these, such as alias analysis, may work better when GCC is
  85. compiling directly from source code then when it is compiling from
  86. generated C code.
  87. </li><li> Better debugging information is generated when compiling
  88. directly from source code than when going via intermediate generated C
  89. code.
  90. </li></ul>
  91. <p>Because of the advantages of writing a compiler as a GCC front end,
  92. GCC front ends have also been created for languages very different
  93. from those for which GCC was designed, such as the declarative
  94. logic/functional language Mercury. For these reasons, it may also be
  95. useful to implement compilers created for specialized purposes (for
  96. example, as part of a research project) as GCC front ends.
  97. </p>
  98. </body>
  99. </html>