/Documentation/Manual
JAZZYK(1)                     Programming language for cognitive agents                      JAZZYK(1)

NAME
       Jazzyk - interpreter of the Jazzyk programming language (In varietate concordia!)

SYNOPSIS
       jazzyk [options] [file]

DESCRIPTION
       Jazzyk  is  an  experimental, special-purpose programming language for development of knowledge
       intensive (intelligent) agent systems. Jazzyk agents consist of

       *      a number of knowledge bases, each realized by a separate

       *      specialized knowledge representation module (plug-in), and an agent program in a form of
              a set of possibly nested rules of the basic form: when Query then Update.

       Jazzyk  was  designed to exploit power of heterogeneous knowledge representation (KR) technolo‐
       gies in a single agent system. Each such a KR technology is encapsulated in a  separate  Jazzyk
       KR  module  providing a simple generic interface consisting of a set of query and update opera‐
       tions. Semantics of Jazzyk based on Behavioural State Machines, an adaptation of  computational
       model of Gurevich’s Abstract State Machines.

       Theory  of  Behavioural  State  Machines,  and  in turn also Jazzyk, draws a strict distinction
       between agent’s knowledge representational and behavioural aspects. While an agent’s  delibera‐
       tion  abilities  reside  in  its  KR  modules, its behaviour are encoded as a Behavioural State
       Machine.

OPTIONS
   GENERAL OPTIONS:
       --help  display the help message and exit

       --version
               output version information and exit

       --license
               display the GNU GPL license information and exit

   COMPILER OPTIONS:
       -0     [--stdin]
               after reading in program files, read also standard input. This option is useful to exe‐
              cute  for  example  automatically generated programs, or programs preprocessed by a spe‐
              cialized filters.

       -I     [--include path]
               macro preprocessor include path(s); Provided include paths will be passed to the inter‐
              nal  macro  preprocessor  invocation  via  -I option. By default, the macro preprocessor
              searches only in the current path (path  in  which  the  interpreter  was  invoked  (see
              pwd(1))).  The source code can include also files from other then the current directory,
              but it has to use relative paths to find the included file correctly. Otherwise all  the
              paths  where include files reside, should be passed to the interpreter using -I options.

       --no-mp
               bypass the macro preprocessor; Internal macro preprocessor will not be invoked  on  the
              input  file(s)  and the content will be passed directly to the compiler. This option can
              be useful in the case the input source code either does not use any higher  level  macro
              overlay definitions, or it is already preprocessed by the macro preprocessor.

   INTERPRETER OPTIONS:
       -L     [--libraries path]
               add an absolute system path to the location of external plug-ins; Plug-ins are standard
              shared dynamically loadable libraries and by default the  interpreter  searches  in  the
              standard  system paths where libraries are present. Use this option in the case you have
              KR plug-ins installed in a non-standard location (w.r.t. your OS),  or  the  interpreter
              has difficulties to find the requested plug-ins.

       -o     [--ordered]
               pick  the  first  applicable rule to apply from a set transformer; By default, when the
              interpreter executes a set mental state transformer {<transformer> ;  <transformer},  it
              first  randomly  shuffles  the  transformer set and then searches for an applicable rule
              from the beginning. This way a random applicable rule is chosen from  the  original  set
              transformer.   Using  this option disables the random shuffling step and lets the inter‐
              preter to choose the first applicable rule of the set transformer w.r.t. the ordering as
              defined in the source code.

       -n     [--cycles num]
               perform  only  num  interpreter  cycles and quit; 0 (default) means endless interpreter
              cycle loop.

       -q     [--no-check-query]
               switch off checking sanity of  resulting  query  variable  substitutions.  Modules  are
              allowed to not substitute all the provided free variables.

   DEBUG OPTIONS:
       -e     [--only-macros]
               print  the  output  of macro preprocessor run only; do not compile, or interpret; Using
              this option amounts to the same effect as if GNU  M4  (m4(1))  were  executed  with  the
              default  options  described  later  in  this manual and the corresponding input file (or
              standard input stream).

       -E     [--compile]
               run preprocessor and compile only; do not interpret; This option is useful for  verify‐
              ing whether the program is interpretable. This means that it is well-formed according to
              the syntax rules of the Jazzyk language and additional semantical constraints hold: each
              module  referenced either in update, query, or notification expression/statement is also
              declared in the program (Note: it can be declared also after the first use!)

       -p     [--print]
               pretty print the program tree structure after compilation stage; This is a  convenience
              feature  to  check  that the compiler understood the structure of the program correctly.
              Currently it prints only a rough structure of the program. In the future it should print
              the executable formatted source code of the input program.

DIAGNOSTICS
       When failing, the interpreter provides informative error messages in the standard compiler for‐
       mat with the location in the source file and an error message. The error output can  be  parsed
       and  processed  by IDEs and text editors like vim(1), emacs(1) and others. Messages are written
       to the standard error output.

       During the internal invocation of the GNU M4 (m4) macro preprocessor, the interpreter  forwards
       whatever error messages of m4 as well.

   GNU M4 INVOCATION
       GNU M4 macro preprocessor is internally invoked with the following default arguments:

       $ m4 -s -E -I $(PACKAGELIBDIR) ...

       Where  $(PACKAGELIBDIR)  stands  for  the  default installation directory where internally used
       shared macros are placed. When  the  default  installation  prefix  is  used,  this  should  be
       /usr/lib/jazzyk.  For more details, see the installation instructions of the jazzyk package and
       help message of its configure script.

       For more details on the m4 options semantics see m4(1).

BUGS
       As of time of writing this manual, no issues and bugs are known to me. For more details see the
       Changelog  file.  In  the  case  you will spot any bugs, or problems, or you have some enhance‐
       ment/feature request,do not hesitate and contact the author, or maintainer.

AUTHOR
       The Jazzyk interpreter was written by Peter Novak pno at aronde.net as a result of his research
       work  towards  PhD. degree in Computational Intelligence Group of Clausthal University of Tech‐
       nology, Clausthal, Germany
       (http://cig.in.tu-clausthal.de).

       Peter Novak <pno at aronde.net>, http://peter.aronde.net/

SEE ALSO
       GNU M4 m4(1).

PUBLICATIONS
       The list of papers related to Jazzyk until February 2008.

       1.     Peter Novak, Juergen Dix:
              Modular BDI Architecture
              Proceedings of Fifth International Joint Conference on Autonomous Agents and  Multiagent
              Systems AAMAS’06,
              Future University, Hakodate, Hokkaido, Japan, pg. 1009-1016
              Association for Computing Machinery/2006, May 2006

       2.     Peter Novak, Juergen Dix:
              Adding structure to agent programming languages
              Proceedings  of  Fifth  International  Workshop  on Programming Multi-Agent Systems Pro‐
              MAS’07,
              Hawai’i, USA, May 2007

       3.     Peter Novak:
              Behavioral State Machines: programming modular agents
              AAAI 2008 Spring Symposium: Architectures for Intelligent Theory-Based Agents, AITA’08
              AAAI Press, Menlo Park, California, USA, March 2008

       4.     Peter Novak:
              Jazzyk: A programming language for hybrid agents with heterogeneous knowledge  represen‐
              tations
              Proceedings  of  Sixth  International  Workshop on Programming Multi-Agent Systems, Pro‐
              MAS’08
              Estoril, Portugal, May 2008

ACKNOWLEDGEMENTS
       Prof. Dr. Juergen Dix participated on development of the underlying theory of the  Jazzyk  pro‐
       gramming  language. Bernd Fuhrmann (at the time a diploma student at Computational Intelligence
       Group) developed a prototype of the Jazzyk interpreter (labelled Jazyk) and provided a valuable
       input in crafting deeper technical details of the Jazzyk interpreter. I thank them.

COPYING PERMISSIONS
       Jazzyk  -  Modular  BDI Agent Architecture programming language interpreter Copyright (C) 2006,
       2007 Peter Novak <pno at aronde.net>

       Jazzyk is free software; you can redistribute it and/or modify it under the terms  of  the  GNU
       General  Public  License  as published by the Free Software Foundation; either version 2 of the
       License, or (at your option) any later version.

       This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; with‐
       out  even  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
       GNU General Public License for more details.

       You should have received a copy of the GNU General Public License along with this  program;  if
       not,  write  to  the  Free  Software  Foundation,  Inc., 59 Temple Place, Suite 330, Boston, MA
       02111-1307 USA

Programming language for cognitive agents     2009/01/10                                     JAZZYK(1)