o2(1) o2(1) NNAAMMEE o2 -- multi-threaded non-deterministic lr(1) compiler/compiler included in the yyaaccccoo22 system. SSYYNNOOPPSSIISS oo22 [ --pp ] [ --tt ] [ --eerrrr ] [ grammar file to compile ] OOPPTTIIOONNSS oo22 options are each individually prefixed by one ``-'' only. If no grammar file is inputted, o2 will ask for one. --pp Create pdf documents for the inputted grammar. It requires CWEB's program suite: ccwweeaavvee and mmppoosstt programs to do this. --tt Generate ``User terminal class'' vocabulary's c++ code along with the inputted grammar. WWaarrnniinngg:: Option is required if the ``User terminal class'' has been modified: Tes added, subtracted, or modified. Not doing so leaves the emitted lr(1) tables out-of-whack! So regenerate aallll tthhee ggrraammmmaarrss so that their lr(1) tables are in sync with the new Terminal vocabulary. See reference to oo22ggrraammmmaarrss..bbaatt script on how to do it for your own grammars. --eerrrr Generate "Error terminal class" vocabulary's c++ code along with the inputted grammar. WWaarrnniinngg:: Ditto as -t warning. DDEESSCCRRIIPPTTIIOONN oo22 extends bottom-up parsing by defining 2 types of grammars: mono- lithic and threaded. A ``thread call'' operator is introduced into the traditional grammar definition along with an arbitration clause. These 2 extensions allow multiple grammars to be run in parallel with poten- tially multiple results returned to be arbitrated upon. The yyaaccccoo22 system is written in the ``Literate programming'' genre using the CCWWEEBB program suite: cweave and ctangle. ctangle emits c++ code while cweave emits a TeX file for the ppddfftteexx program to typeset into a pdf document. oo22 is just 1 program within the yacco2 translation system. Other items of import: yyaaccccoo22 library for your own compiler to link to and oo22lliinnkkeerr that is o2's companion program to link all your grammars together. Grammars and Terminal vocabulary files support cweave's language direc- tives and TTeeXX typesetting facilities. By using the --pp option, oo22 emits files for _m_p_o_s_t (a graphic drawing program) and _c_w_e_a_v_e digestion. _m_p_o_s_t draws Niklaus Wirth's ``Pascal grammar like diagrams'' that get included into files processed by cweave. _c_w_e_a_v_e then generates the Tex files for the _p_d_f_t_e_x program to generate the pdf documents. oo22 oouuttppuutteedd ffiilleess c++ code and lr(1) tables for each grammar and grammar's fsc type file for o2linker consumption Pdf documents per grammar: grammar code and its lr(1) cross reference tables OOTTHHEERR FFEEAATTUURREESS -- Modular grammars allowing reuse by other compilers -- Simplified ambiguity resolution -- Programmable ``context sensitive'' lookahead per threaded grammar -- Self documenting -- Dynamic tracing / trouble shooting facilities -- Out-of-the-box error messaging -- Multiple input / output token container types: Files Trees In memory string EEXXAAMMPPLLEESS 1) Compiling one of o2's grammars cd /usr/local/yacco2/compiler/grammars /usr/local/yacco2/bin/o2 eol.lex # no options except file: emit c++ code for grammar 2) Generate grammar's documents cd /usr/local/yacco2/compiler/grammars o2 -p eol.lex # bash PATH variable modified to resolve o2 whereabouts 3) Compile grammar and ``Error class'' due to new error terminal added o2 -err /usr/local/yacco2/compiler/grammars/eol.lex SSEEEE AALLSSOO bbyy mmaann oo22lliinnkkeerr((11)),, yyaaccccoo22((11)),, CCWWEEBB((11)),, ccwweeaavvee((11)),, ccttaannggllee((11)),, mmppoosstt((11)),, TTeeXX((11)) In //uussrr//llooccaall//yyaaccccoo22//ddooccss// wlibrary.pdf -- yacco2's library documented ``literate program'' o2.pdf -- compiler/compiler documented ``literate program'' o2linker.pdf -- linker documented ``literate program'' yacco2's grammars's pdfes o2linker_doc.pdf -- example of o2/o2linker's grammars cross reference produced by o2linker o2book.pdf -- reference manual In //uussrr//llooccaall//yyaaccccoo22// READMEvx.y.pdf -- installation guide x: version number, y: minor adjustment number. bld_bash_APPLE script to build complete yacco2 system In //uussrr//llooccaall////yyaaccccoo22//ccoommppiilleerr//ggrraammmmaarrss,, to help u out, some bash scripts that u can clone off for your own projects: o2grammars.sh -- gen all grammars with possible inputted parameters gen1grammar.sh -- gen 1 grammar where appropriate parameters are asked by the script SSUUGGGGEESSTTEEDD RREEAADDIINNGGSS GGIIVVIINNGG RREEAASSOONNSS FFOORR YYAACCCCOO22 SSYYSSTTEEMM In //uussrr//llooccaall//yyaaccccoo22//ddooccss p1 and p2 pdf documents -- unpublished essays overviewing some of whyes for yacco2 development Tugboat-o2.pdf -- unpublished essay on ``literate programming'' as applied to the yacco2 system NNOOTTEE The bld_bash_APPLE script is used as an example. There are other bash scripts for GGNNUU and SSOOLLAARRIISS.. See READMEvx.y.pdf. OOTTHHEERR LLIINNKKSS wwwwww..ttuugg..oorrgg -- website to download the CCWWEEBB ``Literate programming'' system, _m_p_o_s_t Metapost graphics program and possibly the TTeeXX typesetting system. These are open source. Please consider joining TTuugg.. AAUUTTHHOORR Dave Bone 1.0 o2(1)