Historically, the parser used to talk to an abstract ``Action`` interface that
had virtual methods for parse events, for example ``ActOnBinOp()``. When Clang
grew C++ support, the parser stopped supporting general ``Action`` clients --
-it now always talks to the :ref:`Sema` library. However, the Parser still
-accesses AST objects only through opaque types like ``ExprResult`` and
-``StmtResult``. Only ::ref::`Sema` looks at the AST node contents of these
+it now always talks to the :ref:`Sema libray <Sema>`. However, the Parser
+still accesses AST objects only through opaque types like ``ExprResult`` and
+``StmtResult``. Only :ref:`Sema <Sema>` looks at the AST node contents of these
wrappers.
.. _AST:
The Sema Library
================
-This library is called by the :ref:`Parser` library during parsing to do
-semantic analysis of the input. For valid programs, Sema builds an AST for
+This library is called by the :ref:`Parser library <Parser>` during parsing to
+do semantic analysis of the input. For valid programs, Sema builds an AST for
parsed constructs.
.. _CodeGen:
The CodeGen Library
===================
-CodeGen takes an :ref:`AST` as input and produces `LLVM IR code
+CodeGen takes an :ref:`AST <AST>` as input and produces `LLVM IR code
<//llvm.org/docs/LangRef.html>`_ from it.
How to change Clang