Back to Richard's main page



jbofi'e is a command-line driven program with the following functions :

If you want to give jbofi'e a try, HERE is a link to a site where you can submit bits of Lojban for jbofi'e to translate online.

Bundled with jbofihe are 4 other programs :

jbofi'e implements version 3.0 of the language baseline. I've developed this with complete independence from the official LLG parser and officially released glosser.

Please report all bugs and suggestions to me at this email address

Download full kit

Version Released on Status Source code distribution MSDOS binary distribution Patches Bug database
snap_20030418 18 April 2003 Current trial release Available by HTTP None None Not available yet
0.38 15 September 2001 Current production release Available by HTTP Available by HTTP From version 0.37 Not available yet
0.37 8 August 2001 Previous release No longer available No longer available From version 0.36 Never set up
0.36 26th Mar 2001 Old release No longer available No longer available No longer available HERE
0.35 14th Jan 2001 Old release No longer available No longer available No longer available HERE

Release notes

(The release notes come from the NEWS file in the source distribution)

New in version 0.38

- revisions to the handling of commas and vowel groupings in the word category
  and validity algorithm.

New in version 0.37

- Include contributed Emacs Lisp functions for driving jbofi'e.
- Add fold markers in some of the source code for editing with VIM version 6

- Improve translations of vowels & other words followed by "bu".  (Only a
  partial list is included in the extradict file.)
- Fix crashes which occurred when tagging term places when the selbri was "jai"
  followed by something other than a brivla.
- Add entries for mu'e, pu'u, za'i, zu'o to the 'patterns' file for use in
  glossing unknown lujvo.
- Integrate recognition of cultural rafsi in lujvo into the ordinary state
  machine (so now 1 integrated state machine instead of 2 separate ones).
  Consequent reduction in table sizes.
- Recognize stage-3-like fu'ivla with >1 short rafsi before the hyphen and
  gloss accordingly if the word isn't in the dictionary 'as-is'.
- New more robust checking for bad cmene (containing la, doi etc)
- Fix bug : missing 'break' statements causing fall-through and hence bogus
  access on another branch of a union.
- Deprecate -g command option from man page.
- Fix glossing of the words for 10**X (the asterisks were treated as
  meta-characters by the glosser)
- Add support for experimental cmavo "xa'o" (selma'o ZAhO, opposite of "za'o")

- For stage 3 fu'ivla, show forward slashes to split the rafsi prefix from the
  hyphen and the hyphen from the word tail.
- Recognize an extension to stage 3 fu'ivla, with >1 rafsi before the hyphen
- Cultural rafsi scanning improvement as for jbofihe.  Remove -cr command line
- Only show exit value of state machine in verbose (-v) mode.
- Detect and show bad cmene forms (la/lai/doi break-up)
- New option '-el' to show a lujvo broken into its component words.
- Fixed some more obscure faults with words containing patterns like "nytc" and

- Include contribution from Björn Gohla to output GNUStep property lists for
  the vocabulary found in the input.

- Complete rewrite of the lujvo form checker used to detect tosmabru failures.
  The old one was completely broken.
- Added the script testing/, which couples jvocuhadju and vlatai in
  a back-to-back configuration for mutual testing.
- Add '-l' switch to try long rafsi even if a short one is available.
- Add '-a' switch to show all possible lujvo forms, not just the 8 most
  preferred ones.

lexer generator (dfasyn/*)
- Add handling of 'state attributes' (to allow actions to be run when automaton
  is in DFA states corresponding to particular NFA states)
- Fix bug in NFA compressor, where algorithm could run off the end of an array.
- Fix bug in DFA compressor (was functionally correct but over-pessimistic
  about combining states)
- Improve command line options
- Add %{ ... %} text inclusion facility
- Allow exit and attribute table element types to be defined by input grammar
- Add 'early exit' capability for DFA states that will immediately exit (=>
  reduced table sizes + more state merging)
- Provide next_state functions in the output file.
- Renamed "dfasyn" with a view to it being made a project in its own right.
New in version 0.36

- Fixed Makefile portability problems discovered in v0.35
- Fix bug where cmavo sequences like nytysy were not recognized (where removing
  y leaves invalid triple)
- Fix bug where the words y, yyyyy, y'y were not recognized as valid cmavo
- Fix bug for -se option applied to nu'u in the middle of a termset.
- Fix bug for -se option applied to elidables with a sequence of 'free'
  constructs following them.
- Fix bugs for -se option applied to boi & ve'o
- Fix several bugs people sent me where jbofihe crashed or generated bad output
  for various small examples.
- Fix bugs scanning cmene containing ..nydz.., ..y,y.. etc
- Many improvements to lexical analyser builder (n2d subdirectory) -
  * generate smaller tables by relying on binary searching in the target app.
  * compress state machines by grouping equivalent DFA states together input
  * input file can specify priority logic to resolve ambiguous accepting states
  * syntax capabilities of input file greatly enhanced
  * processing speed much improved
  (This tool can now be considered a standalone project in its own right,
  except for the lack of documentation on it.)
- Fix bugs in scanner's fu'ivla recognition (including length of consonant
- Recognise stage 3 and stage 4 fu'ivla separately to improve glossing
- Allow consonant+comma+vowel triples within words.
- Include configure option --embed to allow a minimal dictionary to be embedded
  into the jbofihe executable (=> no separate dictionary file required at
- Add handling of zei (completely missing before)
- Add configure option --embed, to allow the gismu+cmavo dictionary to be
  compiled directly into the jbofihe executable.  (No run-time dictionary is
  then needed, however there is no capability to add new definitions in this
- Simplify consonant doubling before -er and -ing suffices in the translator.
- Added configure script, to help people who just want to 'build+go' without
  reading the docs.
- Switch to GNU General Public License (replaces customised zlib/BSD-like
- Detect zoi/la'o constructions left open at the end of the text.

New in version 0.35

(Changes apply to jbofihe unless stated otherwise)

- Add support to show elidable cmavo that were omitted from the input text (-ie
  command switch).  (Cmavo inserted this way are displayed in upper case in the
- Add option to require that the input text does not have any cmavo elided (-re
  command switch).  (This may be useful as a learning aid and when trying to
  debug grammar failures.)
- Add option to report any elidable cmavo which are superfluous in the text,
  accessed with the -se comand switch.  Where a sequence of such words can be
  partially omitted, all possible 'minimal' sub-sequences are shown.  A verbose
  option (-sev) gives extra visibility of how the algorithm makes its decisions
  about valid minimal sequences.
- Totally rewritten algorithm for determining type (cmavo, brivla, cmene etc)
  of input words.  Should now enforce word structure rules 100%, and be
  competely robust at removing cmavo prefixed onto the front of gismu, lujvo
  and fu'ivla.  The testbench for this part of the program is bundled as a
  separate tool (vlatai).  Acceptance of cultural rafsi (section 4.16 of the
  Reference Grammar) is optional (-cr switch).
- Add backtracing mode for showing the parser stack when a syntax error occurs
  (-bt option).  May assist in debugging syntactically invalid texts.
- Changed approach to building the glossing dictionary for jbofihe and cmafihe.
  The gismu and cmavo information is now bundled with the source.  The 2 lujvo
  files are also used if they are found in the current directory at build time.
  This avoids the user having to download extra files to get a minimal working
- Add case tagging for selbri involving MOI, GOhA, NUhA
- Fix bugs parsing number/lerfu-string containing bu followed by
- Fix printing of 'bu' construction on token list following a parse error.
- Fix output translation if a 'bu' construction occurs in a number/lerfu
  sequence before MOI.
- Attempt output translation of zo, zoi, bu etc. constructions.
- Fix inability to parse pe'a.
- Fix inability to parse fu'e.
- Default output width (-w argument) for text output changed to 79 instead of
- Fix core dump illustrated by a text containing a single cmavo which causes a
  parse error.
- Return status from main() to the shell reflects whether there was a parse
  error or not.
- Show misparsed token as well as previously parsed ones after a parse error is
- Fix line numbering across comments and when token follows whitespace or
- Cope with multiple BAhE cmavo before a word (previously only the closest one
  was shown in outputs)
- Implement erasure processing described in the Refgram. (for 'su' as described
  in grammar.300 file)
- Deal properly with cmene which violate the rule about la/lai/doi appearing
- Port to MSDOS environment (using DJGPP toolchain); binary release for MSDOS.
- Allow whether to use fread or mmap to access dictionary to be specified at
  configure time.
- Open certain files in binary mode instead of text (support DJGPP port)
- Change name of default dictionary (support DJGPP port)
- Make banners for 'jbofihe -k' option go to stdout not stderr (so they now
  flow amongst the token list)
- Given an advisory message when a core dump would previously have happened.
- Update various details in manual pages
- Allow carriage return characters at ends of lines (cmafihe)
- Further fixes to translation of pre-hyphen part of type 3 fu'ivla
- Fixes to translation of time_offset when specific entries lacking from
- Support the cmavo va'e (mentioned in reference grammar yet not in word lists)
- Allow directory containing word lists to be specified to configure script,
  rather than having to be searched for.  
- Fix bug in jvocuhadju where the 4 forbidden triples starting with 'n' weren't
  being detected.
- Various minor bug fixes.
New in version 0.34

- Add support + translations for the cmavo that were missing from the original
  cmavo list
- Fix bugs in handling certain cmavo when followed by an indicator (e.g. mi se
  cai zdile)
- Fix bugs in cases when constructions involving lu, bu, lo'u...le'u, zo, zoi
  etc are nested.

New in version 0.33

- Support for the 'term ::= tag termset' rule discussed on the Egroups list
  around the start of June 2000.
- Fix bug splitting cmavo from front of brivla
- Fix bug translating fu'ivla when the 'Lojbanic' part before the hyphen can't
  be translated.

New in version 0.32a

- Fix major bugs in the lexical analysis for cmafi'e (brivla mis-scanned as
  sequences of cmavo joined together.)

New in version 0.32

- Add capability to jbofi'e to parse texts where cmavo have been prefixed onto
  the following brivla.
- Fix bug with pei not being handled properly.

New in version 0.31

- Add pattern matching scheme to jbofi'e translater, which recognizes and
  provides default translations for standard lujvo forms, e.g. -mau, -gau, nun-


There are a number of pre-requisites your system must satisfy for you to have any hope of compiling this software. In particular, you need several development tools installed :

Also, the following tools are recommended but not essential

Starting from version 0.35, enough files are bundled with the source distribution to allow a minimal glossing dictionary to be built. (This contains gismu and cmavo only.) The build process will also detect the presence of either (or both) of two lujvo database files and use whichever it finds to build a bigger and better glossing dictionary. To take advantage of this, you need to obtain the lujvo files separately and put them in the jbofihe-0.35 directory before running 'make dictionary' (or 'make all'). The file details are in the table below:

FilenameSizemd5 checksumDownload link

Ready-compiled dictionary

If you want the full dictionary but don't want to download the lujvo files, you can download the precompiled dictionary here.

Compressed with gzip Compressed into a zipfile


In addition to the Unix tools listed above, you will need a Linux/MS-DOS dual boot PC. The MS-DOS partition needs to be mounted as /dosc under Linux.

The procedure is

sh doskit.fe
make -f Makefile.dos progs (after rebooting into DOS)
sh (after rebooting Linux again)


My general lojban page

The Logical Language Group

Subscribe to the Lojban mailing list
Powered by

Back to Richard's main page