@ignore
@node Semantic Internals
@chapter Semantic Internals
@c This 'ignore' section fools texinfo-all-menus-update into creating
@c proper menus for this chapter.
@end ignore

This chapter explains the internals of @semantic{}.
This information would not be needed by neither application developers
nor grammar developers.

It would be useful mostly for the hackers who would like to learn
more about how @semantic{} works.

@section Semanticdb

@acronym{Semanticdb} complexity is certainly an issue.  It is a rather
hairy problem to try and solve.

This is just an overview really.  The basic organization is this:

@table @file
@item semanticdb.el
Defines a @dfn{database} and a @dfn{table} base class.  You can
instantiate these classes, and use them, but they are not persistent.

This file also provides support for @code{semanticdb-minor-mode},
which automatically associates files with tables in databases so that
tags are @emph{saved} while a buffer is not in memory.

Lastly, it has that @dfn{root} stuff in it.  Basically, it is a system
by which a file can be associated with the root of a project, so if
you have a tree of directories and source files, it can find the root,
and allow a tag-search to span all available databases in that
directory hierarchy.

@item semanticdb-file.el
Subclass the base class database so that it can be saved to disk.
Implements all the hooks needed to unbind/rebind tags to a buffer
while writing them to a file.  Overrides various methods as necessary.

@item semanticdb-system.el
Subclass @code{semanticdb-file}.  Supports creating a @acronym{DB} in
a directory you do not have write-access to, and saving the cache in
your home directory.  Also implements a @acronym{C}/@acronym{C++}
subclass which can be used for caching @file{/usr/include}.  (A rather
slow process.)

@item semanticdb-el.el
Implements a different kind of @dfn{system} database that uses Emacs
internals to perform queries.  Sadly, this shows a problem of
nomenclature since it is not a @code{semanticdb-system-database}
(which saves to a file), but database with no file component that
queries system tags in a different way.

@item semanticdb-find.el
Infrastructure for searching groups @semantic{} databases, and dealing
with the search results format.
@end table

New things partly written, or to be written someday.

@table @file
@item semanticdb-postgres.el
Any @acronym{DB} would do, @acronym{MySQL} would be fine.  Basically write
tags into a relational database, and provide searching facilities.
This is probably the only way to allow fast look-ups in humongous
source areas.  Another possibility would be something like what
@acronym{Cscope} does.

@item semanticdb-java.el
A system database for @acronym{Java} that uses @acronym{JDEE}
@acronym{BeanShell} queries.

@item semanticdb-obj.el
A system database that uses command line tools to rip symbols out of
@file{.so}, or @file{.a}, or @file{.o} files, and translates into
tags.

@item semanticdb-javascript.el
A recent notion that somehow knows all those built-ins
@acronym{JavaScript} has.
@end table

@c  LocalWords:  Cscope JDEE BeanShell JavaScript MySQL Semanticdb
