NyktOP Project Homepage
Welcome to the NyktOP Homepage!
Goals
Short: NyktOP is a source code generator package. It is based on
(runtime) support libraries/modules for different languages.
NyktOP shall simplify prototyping (with tcl, perl, smalltalk or C++) and
support structured programming. It's advantages are: standardized (ascii)
File-I/O (via SLANG) and easy modelling of
datastructures.
The idea is to offer the possibility to select a certain implementation
language for a certain problem of interest, and to re-use the same
data-model with another language in another problem of interest.
E.g. use Tcl as a language for a very interactive application and C++
for a very time-consuming backend application on the same data model.
The first version had simple reasons:
-
In some projects the internal code generator of MOOSE
had to be used. But since MOOSE was in a very rapdidly
changing state, we had to build a generator for RODEO/II, that
produced similar C++ code and that was that independent, that we
wouldn't get problems while MOOSE was changing.
-
MOOSE was never meant to support
static
(C++ verb) or class (smalltalk verb) attributes. However in
certain situations such attributes are very handy.
-
.SLANG Files - and
MOOSE currently only supports that file
format - versioning and revision control via
RCS is just impossible, b/c object order usually
differs between each two write-outs.
-
.SLANG files (see 3) in fact
cannot be edited manually, b/c references are written with
key-values calculated from memory addresses of referenced
objects. (for this reason our main input source for the (old)
generator are ascii .pre-files; for the new perl-based
generator we use .input files)
Tools
To achieve our goal we supply different tools:
-
A generic diagram editor (tk-based) to enable simple design
of data structures
-
A template-expander (C-based) to be used as a codegenerator
for different languages (I've recently seen a very similar
approach named gslgen)
-
A perl-based code generator to replace the old template expander
has been created.
Supported languages
First we support all languages that are also supported by
MOOSE (not only since there is an export-function
to but also since we try generate very similar output):
-
C++ (together with the mcl of
AG Zimmermann)
(from old .pre)
-
Smalltalk (for Digitalk/Objectshare
VisualWorks*) (from .pre and from .input)
Furthermore we support some other generation:
-
Export to MOOSE (from .pre)
-
Class hierarchy as Postscript*, MIF
((Frame)Maker* Interchange Format),
RTF (Rich Text Format) (from .pre)
-
Class std documentation for CC in HTML (from .pre, .input)
-
TCL/TK generator (also with std GUI,
tk8-based) (from .input)
-
different Perl generators (from .input)
-
Python generator (from .input). Unfortunately
there are not yet all runtime support libraries ready.
-
Yet untested (and discontinued) gawk-generator
(awk does not support structures and thus is not apted to support OO-like
structures at all. This try has been given up)
-
Yet untested Visual Basic*-generator
(To test the generator's output, I would have to install
M$* products ...) (from .input)
-
JavaScript generator (from .input). Unfortunately
there are not yet runtime support libraries and due to a lack of file
I/O in JavaScript there will probably never be.
-
(experimental) SQL-generators (from .input)
(To produce sql schemata matching the data structures
of a model. To make those generator more useful, I'd
have to support generic Database I/O in the support
libraries)
-
(experimental) CGI-interface generator
(To produce something like a default www-interface for
data manipulation.) (from .input)
(converters exist from .input to .pre (and vice versa) and from
.pre to MOOSE's .slang format (and vice versa). Thus from an
existing file, every generator can be fed (with interim steps))
Problems
A slight problem is the fact, that currently the different
generator parts (and also their templates) operate upon
different dataset syntax...
(the younger perl-, smalltalk- and tcl-generators try
to use a completely other .input syntax than the
.pre syntax of the older C++ generator)
On the other hand for the elder .pre format used w/
C++-generators we have a bigger template base. For example the
C++ code-generator allowed to build a complete application with
functions and additional methods, while perl, Smalltalk and tcl
codegenerators do just generate data-structures, their I/O and
std access methods.
Besides the elder templates are more sophisticated; we had e.g.
certain templates for several flags and for arrays and different
non-class types, that are not yet supported in newer generators
Since there are now converters between the different formats (at
least from .pre to .input and from .input to .pre) this should be
not that urgent any more.
Biggest problem however is the fact, that
NyktOP is still a single-user/ single-developer system:
as long as no-one but the creator uses it, there will be no
progress. This problem covers especially the template-expander,
which acts as the main c++ code generator and which is a really
dirty & buggy old C hack. Another - perhaps even worse - example
is the missing documentation. Due to the fact, that every function
is used only by its writer, there was 'no need' to produce any
documentation.
Existing Projects using NyktOP
NyktOP code generators have already been used in different
own projects.
- stat (.pre for C++)
- A simple statistical evaluation system to calculate netlength of
designed chips in order to check, if they follow certain stochastic
distributions (gauss, exp; check via chi-square)
(job, finished)
- RODEO/II (.pre for C++)
- Reuse Of Design Objects: a system to support eCAD by supporting reuse
of elder design parts. Possibility to use customized comparison functions
to search for the best matching desgin-case in a database.
(Project thesis, finished)
- sdlparser (.pre for C++)
- Converter from SDL into SLANG
(Part of master thesis, finished)
- nykditor (tcl/tk)
- simple editor to input structured designs. customable via
different configs (current configs: EER, Statecharts)
(Statecharts part of master thesis, finished) (EER: just a joke,
incompatible replacement for MOOSE)
...
Portability
All used tools are known to work on HP/UX 9.x, 10.0 and Linux
(SuSE 5.2, SuSE 6.1), however there is no aid for installation.
If U encounter problems during installation, plz send an
EMail to the author.
Author
- SnailMail:
-
Bernd Noll,
Zu den Eichen 8,
D-56567 Neuwied,
Germany;
- Phone:
-
+49 / -631 / 311 2005
- EMail
-
mailto:noll@email.com
- WWW
-
http://noll.xsilon.de/
- IRC
-
`0` @ IRCnet (Sorry, but I have not been to the IRC for years)
Download
The complete project is split into different archives,
which may be used independently of each other.
This has been done, b/c a perl-programmer will surely not
use the Tcl or Python runtime modules. Thus putting 'em
all into one archive might have caused a lot of unneccessary
data.
Some files in the download directory
now have got revision numbers. The links below do not show
those numbers (There are softlinks from the unnumbered files to
the numbered ones). The only purpose of this numbering is to show,
if a file has been changed. So do not try to interpret something
else with the numbers.
-
Get the tcl/tk (tcl.tar.gz, 33k
) and maybe (if U wanna use Nykditor) the editor related modules
(nyktop-tcl.tar.gz, 100k)
(Related is a c-module to speed up slang-i/o:
tcl-slang.tar.gz, 5k)
-
Get the perl related runtime modules
(perl.tar.gz, 23k)
-
Get the python related runtime modules
(python.tar.gz, 17k)
-
Get the perl based generator
(generator.tar.gz, 110k)
Some additional modules can be found in the frame oriented generator
(framer.tar.gz, 30k)
-
For tcl-based CGI programming, U might be interested in
html2cgi.tar.gz, 20k
-
Get the old template-expander based CC generator
(old.tar.gz, 220k. Trying to get
and use this archive is probably a bad idea, since it's a collection
of terrible hacks)
-
A copy of the current Disclaimer is
also directly accessible, for those ppl, who fear, that they make any
contract w/ anyone by just downloading the soft.
-
For the sake of completeness, U can also download an archive of all
html pages of the NyktOP homepage.
This is suggested, since there is still no documentation for NyktOP.
-
To give U a shortcut, there is also an archive (250k), which contains all perlbased generator elements
and all generic runtime support libraries (as far, as they come from my
side) (It does not contain the templatebased generator nor the Nykditor
application).
There are installation scripts supported for tcl, python and perl related
modules and also for the newer perl based generator; use via
'bash INSTALL.bash (destinationdirectory:=/usr/local)'.
The elder template-expander based generator has no installation support.
History
Due to the fact, that the archives currently don't have any consistent
version numbering (no release-number neither in name nor intern), it is
suggested to have a look at the History
page, which should name at least the most important changes.
The name of the game
Νυκτοσ
Οφταλμοι
-
λαμπαδεσ
λειπων
Nyktos ophtalmoi - lampades leipon. Eyes of the night, lights
for the left.
This is a very pathetic name for just a small little collection of
prototyping tools, but the name was born, when we heard the news,
that CBM* had dropped Amiga*.
References
-
MOOSE
- the Model-based Object Oriented Software generation Environment,
is an internal project of AG Zimmermann at University of Kaiserslautern.
More information on it can be found below homepage of
AG
Zimmermann.
-
Perl
- is a nice semi-interpreted language,
mainly used for scripting and conversion.
It's main site is Perl.com.
-
TCL
- is another interpreter language; it is
usually used in connection with TK (TCL/TK) for smaller GUI
oriented applications.
It's main site is Scriptics.com.
-
AWK
- is an elder scripting language merely for
filtering scripts. There are newer versions of this language:
mawk, nawk and gawk. We do only refer to gawk (GNU-awk), which
can be found at the HP of the Free
software foundation. Differences to other awk implementations
are not known to the author (but surely exist).
-
Python
- is just another interpreter language; straightforeward,
quite strongly oo. (Unfortunately it depends on indentation for
block structuring, which is sometimes quite annoying.)
It's main site is Python.org.
-
Visual Basic
- by M$ is a popular (?) hacking language in the M$ Windooze world.
The language lives from its integrated environment and embedding into
M$'s office applications (VBA).
U'll find more information at M$
home.
-
JavaScript
- is an interpreter language developed for Netscape navigator.
Since it has been copied in M$IE, there have been tries for
standardisation of that language. The language has a very nice, unusual
oo behaviour: every object may be augmented w/ additional attributes
and methods, and thus may be used as a prototype for a new class.
More information is available at
javascript.org.
Summary of Links
-
Local documents
-
current mirrors:
-
External links
* We use different registered or trademarked expressions
in this file, without explicitely showing the properties.
Best viewed with probably any Browser;
if U want to see a 'beautiful' page with dynamic elements,
frames and lots of gfx, U'll have to go somewhere else.