blob: c334e39a2974e2f409fb6247bd8c24b3b177c095 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Extending ctags with a parser written in C — Universal Ctags 0.3.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/classic.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Writing a parser in C" href="parser-in-c.html" />
<link rel="prev" title="Optscript, a programming language for extending optlib parsers" href="optscript.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="parser-in-c.html" title="Writing a parser in C"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="optscript.html" title="Optscript, a programming language for extending optlib parsers"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">Universal Ctags 0.3.0 documentation</a> »</li>
<li class="nav-item nav-item-this"><a href="">Extending ctags with a parser written in C</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="extending-ctags-with-a-parser-written-in-c">
<span id="extending-ctags-in-c"></span><h1>Extending ctags with a parser written in C<a class="headerlink" href="#extending-ctags-with-a-parser-written-in-c" title="Permalink to this headline">¶</a></h1>
<p>This chapter describes how to add a parser in C and the internal API of
Universal Ctags.</p>
<p>Before you start writing a parser in C, consider using <em>optlib parser</em>.
Universal Ctags extends the functionality so extensively that it can implement
most of functionality for the parser.
See <a class="reference internal" href="man/ctags-optlib.7.html#ctags-optlib-7"><span class="std std-ref">ctags-optlib(7)</span></a> and <a class="reference internal" href="optlib.html#optlib"><span class="std std-ref">Extending ctags with Regex parser (optlib)</span></a> for details.</p>
<p><em>optlib parser</em> is also suitable for prototyping of a parser in C.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="parser-in-c.html">Writing a parser in C</a><ul>
<li class="toctree-l2"><a class="reference internal" href="parser-in-c.html#registering-a-parser">Registering a parser</a></li>
<li class="toctree-l2"><a class="reference internal" href="parser-in-c.html#reading-input-file-stream">Reading input file stream</a></li>
<li class="toctree-l2"><a class="reference internal" href="parser-in-c.html#parsing">Parsing</a></li>
<li class="toctree-l2"><a class="reference internal" href="parser-in-c.html#adding-a-tag-to-the-tag-file">Adding a tag to the tag file</a></li>
<li class="toctree-l2"><a class="reference internal" href="parser-in-c.html#adding-the-parser-to-ctags">Adding the parser to <code class="docutils literal notranslate"><span class="pre">ctags</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="parser-in-c.html#misc">Misc.</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="internal.html">Input text stream</a><ul>
<li class="toctree-l2"><a class="reference internal" href="internal.html#inputfile-type-and-the-functions-of-input-group"><cite>inputFile</cite> type and the functions of input group</a></li>
<li class="toctree-l2"><a class="reference internal" href="internal.html#the-functions-of-bypass-group">The functions of bypass group</a></li>
<li class="toctree-l2"><a class="reference internal" href="internal.html#the-functions-of-raw-group">The functions of raw group</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="internal.html#output-tag-stream">Output tag stream</a><ul>
<li class="toctree-l2"><a class="reference internal" href="internal.html#cork-api">cork API</a><ul>
<li class="toctree-l3"><a class="reference internal" href="internal.html#background-and-idea">Background and Idea</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#how-to-use">How to use</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#automatic-full-qualified-tag-generation">Automatic full qualified tag generation</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="internal.html#tokeninfo-api">tokenInfo API</a></li>
<li class="toctree-l1"><a class="reference internal" href="internal.html#multiple-parsers">Multiple parsers</a><ul>
<li class="toctree-l2"><a class="reference internal" href="internal.html#guest-parser-promise-api">Guest parser (promise API)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="internal.html#id3">Background and Idea</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#usage">Usage</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#internal-design">Internal design</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="internal.html#api-for-subparser">API for subparser</a><ul>
<li class="toctree-l3"><a class="reference internal" href="internal.html#outline">Outline</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#fields-of-subparser-type">Fields of <code class="docutils literal notranslate"><span class="pre">subparser</span></code> type</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#extending-subparser-type">Extending <code class="docutils literal notranslate"><span class="pre">subparser</span></code> type</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#making-a-tag-in-a-subparser">Making a tag in a subparser</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#calling-methods-of-subparsers-from-a-base-parser">Calling methods of subparsers from a base parser</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#registering-a-subparser-to-its-base-parser">Registering a subparser to its base parser</a></li>
<li class="toctree-l3"><a class="reference internal" href="internal.html#scheduling-running-the-base-parser">Scheduling running the base parser</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="internal.html#packcc-compiler-compiler">PackCC compiler-compiler</a></li>
<li class="toctree-l1"><a class="reference internal" href="internal.html#automatic-parser-guessing-tbw">Automatic parser guessing (TBW)</a></li>
<li class="toctree-l1"><a class="reference internal" href="internal.html#managing-regular-expression-parsers-tbw">Managing regular expression parsers (TBW)</a></li>
<li class="toctree-l1"><a class="reference internal" href="internal.html#ghost-kind-in-regex-parser-tbw">Ghost kind in regex parser (TBW)</a></li>
</ul>
</div>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
<p class="topless"><a href="optscript.html"
title="previous chapter">Optscript, a programming language for extending optlib parsers</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="parser-in-c.html"
title="next chapter">Writing a parser in C</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="parser-in-c.html" title="Writing a parser in C"
>next</a> |</li>
<li class="right" >
<a href="optscript.html" title="Optscript, a programming language for extending optlib parsers"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">Universal Ctags 0.3.0 documentation</a> »</li>
<li class="nav-item nav-item-this"><a href="">Extending ctags with a parser written in C</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
© Copyright 2015, Universal Ctags Team.
Last updated on 11 Jun 2021.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.0.2.
</div>
</body>
</html>
|