© Copyright 2005 Peri Hankey - documentation license Gnu FDL - code license Gnu GPL - validate HTML
SourceForge.net Logo groklm: a minimal translator

home variations on a theme

This is the groklm experiment, which is one of several variations on a theme:

translate to lispy-schemey prefix notation: groklm_experiment
translate to 3-address notation: grokreg_experiment
a filtering translator to lispy-schemey prefix notation: grokout_experiment

home build and run the groklm ruleset

Here is the groklm.lmn ruleset as a web page: groklm

Compile the groklm ruleset as a shebang script called groklm.lm:

 [user@machine web]$ make groklm.lm
 lmn2m -o groklm.lm -s /usr/bin/lm groklm.lmn
 chmod +x groklm.lm

Try it with normal output:

 [user@machine web]$ ./groklm.lm
 a = B + (1 - 1/x) * 2;
 C (set a (add B (mul (sub 1 (div 1 x)) 2)))

Try it with diagram output - the -W 60 specifies the width of the diagram, and must precede the -t D which specifes tracing in diagram output style:

 [user@machine web]$ ./groklm.lm -W 60 -t D
 a = B + (1 - 1/x) * 2;
                                             eof 'a'
         ?                                   eof 'a'
         .----------------------000001
         |                                  expr 'a'
         |?                                 expr 'a'
         |.---------------------000002
         ||                                 opnd 'a'
         ||?                                opnd 'a'
         ||.--------------------000003
         |||                                   % ' '
         |||                              repeat ' '
         |||                           [a-zA-z_] ' '
         |||?                          [a-zA-z_] ' '
         |||-                          [a-zA-z_] ' '
         |||                               toSym ' '
         |||                                   : ' '
         ||'--------------------000003---------- ----------000003-----------------------.
         ||                                 opnd opnd                                   |
         ||                                    : :                                      |
         ||                                                000003-----------------------'
         ||                                   op ' '
         ||?                                  op ' '
         ||                                   op '='
         ||?                                  op '='
         ||.--------------------000006
         |||                                expr ' '
         |||?                               expr ' '
         |||                                expr 'B'
         |||?                               expr 'B'
         |||.-------------------000008
         ||||                               opnd 'B'
         ||||?                              opnd 'B'
         ||||.------------------000009
         |||||                                 % ' '
         |||||                            repeat ' '
         |||||                         [a-zA-z_] ' '
         |||||?                        [a-zA-z_] ' '
         |||||-                        [a-zA-z_] ' '
         |||||                             toSym ' '
         |||||                                 : ' '
         ||||'------------------000009---------- ----------000009-----------------------.
         ||||                               opnd opnd                                   |
         ||||                                  : :                                      |
         ||||                                              000009-----------------------'
         ||||                                 op ' '
         ||||?                                op ' '
         ||||                                 op '+'
         ||||?                                op '+'
         ||||.------------------000012
         |||||                              expr ' '
         |||||?                             expr ' '
         |||||                              expr '('
         |||||?                             expr '('
         |||||.-----------------000014
         ||||||                             opnd '('
         ||||||?                            opnd '('
         ||||||.----------------000015
         |||||||                            expr '1'
         |||||||?                           expr '1'
         |||||||.---------------000016
         ||||||||                           opnd '1'
         ||||||||?                          opnd '1'
         ||||||||.--------------000017
         |||||||||                             % ' '
         |||||||||                        repeat ' '
         |||||||||                         [0-9] ' '
         |||||||||?                        [0-9] ' '
         |||||||||-                        [0-9] ' '
         |||||||||                        option ' '
         |||||||||                           '.' ' '
         |||||||||?                          '.' ' '
         |||||||||-                          '.' ' '
         |||||||||                         toNum ' '
         |||||||||                             : ' '
         ||||||||'--------------000017---------- ----------000017-----------------------.
         ||||||||                           opnd opnd                                   |
         ||||||||                              : :                                      |
         ||||||||                                          000017-----------------------'
         ||||||||                             op ' '
         ||||||||?                            op ' '
         ||||||||                             op '-'
         ||||||||?                            op '-'
         ||||||||.--------------000021
         |||||||||                          expr ' '
         |||||||||?                         expr ' '
         |||||||||                          expr '1'
         |||||||||?                         expr '1'
         |||||||||.-------------000023
         ||||||||||                         opnd '1'
         ||||||||||?                        opnd '1'
         ||||||||||.------------000024
         |||||||||||                           % '/'
         |||||||||||                      repeat '/'
         |||||||||||                       [0-9] '/'
         |||||||||||?                      [0-9] '/'
         |||||||||||-                      [0-9] '/'
         |||||||||||                      option '/'
         |||||||||||                         '.' '/'
         |||||||||||?                        '.' '/'
         |||||||||||-                        '.' '/'
         |||||||||||                       toNum '/'
         |||||||||||                           : '/'
         ||||||||||'------------000024---------- ----------000024-----------------------.
         ||||||||||                         opnd opnd                                   |
         ||||||||||                            : :                                      |
         ||||||||||                                        000024-----------------------'
         ||||||||||                           op '/'
         ||||||||||?                          op '/'
         ||||||||||.------------000025
         |||||||||||                        expr 'x'
         |||||||||||?                       expr 'x'
         |||||||||||.-----------000026
         ||||||||||||                       opnd 'x'
         ||||||||||||?                      opnd 'x'
         ||||||||||||.----------000027
         |||||||||||||                         % ')'
         |||||||||||||                    repeat ')'
         |||||||||||||                 [a-zA-z_] ')'
         |||||||||||||?                [a-zA-z_] ')'
         |||||||||||||-                [a-zA-z_] ')'
         |||||||||||||                     toSym ')'
         |||||||||||||                         : ')'
         ||||||||||||'----------000027---------- ----------000027-----------------------.
         ||||||||||||                       opnd opnd                                   |
         ||||||||||||                          : :                                      |
         ||||||||||||                                      000027-----------------------'
         ||||||||||||                         op ')'
         ||||||||||||?                        op ')'
         ||||||||||||                                      000028-----------------------.
         ||||||||||||                         op op                                     |
         |||||||||||'-----------000026                                                  |
         |||||||||||                        expr expr                                   |
         |||||||||||                           : :                                      |
         ||||||||||'------------000025---------- ----------000025----------------------.|
         ||||||||||                           op op                                    ||
         |||||||||'-------------000023                                                 ||
         |||||||||                          expr opnd                                  ||
         |||||||||?                         expr opnd                                  ??
         |||||||||.-------------000029                                                 ||
         ||||||||||                         opnd opnd                                  ||
         ||||||||||                            : :                                     ||
         ||||||||||                                        000025----------------------'|
         ||||||||||                                        000028-----------------------'
         ||||||||||                           op ')'
         ||||||||||?                          op ')'
         ||||||||||                                        000030-----------------------.
         ||||||||||                           op op                                     |
         |||||||||'-------------000029                                                  |
         |||||||||                          expr expr                                   |
         |||||||||                             : :                                      |
         ||||||||'--------------000021---------- ----------000021----------------------.|
         ||||||||                             op op                                    ||
         |||||||'---------------000016                                                 ||
         |||||||                            expr opnd                                  ||
         |||||||?                           expr opnd                                  ??
         |||||||.---------------000031                                                 ||
         ||||||||                           opnd opnd                                  ||
         ||||||||                              : :                                     ||
         ||||||||                                          000021----------------------'|
         ||||||||                                          000030-----------------------'
         ||||||||                             op ')'
         ||||||||?                            op ')'
         ||||||||                                          000032-----------------------.
         ||||||||                             op op                                     |
         |||||||'---------------000031                                                  |
         |||||||                            expr expr                                   |
         |||||||                               : :                                      |
         |||||||                                           000032-----------------------'
         |||||||                             ')' ')'
         ||||||'----------------000015---------- ----------000015-----------------------.
         ||||||                             opnd opnd                                   |
         ||||||                                : :                                      |
         ||||||                                            000015-----------------------'
         ||||||                               op ' '
         ||||||?                              op ' '
         ||||||                               op '*'
         ||||||?                              op '*'
         ||||||.----------------000034
         |||||||                            expr ' '
         |||||||?                           expr ' '
         |||||||                            expr '2'
         |||||||?                           expr '2'
         |||||||.---------------000036
         ||||||||                           opnd '2'
         ||||||||?                          opnd '2'
         ||||||||.--------------000037
         |||||||||                             % ';'
         |||||||||                        repeat ';'
         |||||||||                         [0-9] ';'
         |||||||||?                        [0-9] ';'
         |||||||||-                        [0-9] ';'
         |||||||||                        option ';'
         |||||||||                           '.' ';'
         |||||||||?                          '.' ';'
         |||||||||-                          '.' ';'
         |||||||||                         toNum ';'
         |||||||||                             : ';'
         ||||||||'--------------000037---------- ----------000037-----------------------.
         ||||||||                           opnd opnd                                   |
         ||||||||                              : :                                      |
         ||||||||                                          000037-----------------------'
         ||||||||                             op ';'
         ||||||||?                            op ';'
         ||||||||                                          000038-----------------------.
         ||||||||                             op op                                     |
         |||||||'---------------000036                                                  |
         |||||||                            expr expr                                   |
         |||||||                               : :                                      |
         ||||||'----------------000034---------- ----------000034----------------------.|
         ||||||                               op op                                    ||
         |||||'-----------------000014                                                 ||
         |||||                              expr opnd                                  ||
         |||||?                             expr opnd                                  ??
         |||||.-----------------000039                                                 ||
         ||||||                             opnd opnd                                  ||
         ||||||                                : :                                     ||
         ||||||                                            000034----------------------'|
         ||||||                                            000038-----------------------'
         ||||||                               op ';'
         ||||||?                              op ';'
         ||||||                                            000040-----------------------.
         ||||||                               op op                                     |
         |||||'-----------------000039                                                  |
         |||||                              expr expr                                   |
         |||||                                 : :                                      |
         ||||'------------------000012---------- ----------000012----------------------.|
         ||||                                 op op                                    ||
         |||'-------------------000008                                                 ||
         |||                                expr opnd                                  ||
         |||?                               expr opnd                                  ??
         |||.-------------------000041                                                 ||
         ||||                               opnd opnd                                  ||
         ||||                                  : :                                     ||
         ||||                                              000012----------------------'|
         ||||                                              000040-----------------------'
         ||||                                 op ';'
         ||||?                                op ';'
         ||||                                              000042-----------------------.
         ||||                                 op op                                     |
         |||'-------------------000041                                                  |
         |||                                expr expr                                   |
         |||                                   : :                                      |
         ||'--------------------000006---------- ----------000006----------------------.|
         ||                                   op op                                    ||
         |'---------------------000002                                                 ||
         |                                  expr opnd                                  ||
         |?                                 expr opnd                                  ??
         |.---------------------000043                                                 ||
         ||                                 opnd opnd                                  ||
         ||                                    : :                                     ||
         ||                                                000006----------------------'|
         ||                                                000042-----------------------'
         ||                                   op ';'
         ||?                                  op ';'
         ||                                                000044-----------------------.
         ||                                   op op                                     |
         |'---------------------000043                                                  |
         |                                  expr expr                                   |
         |                                     : :                                      |
         |                                                 000044-----------------------'
         |                                     ; ';'
         |?                                    ; ';'
         |                                                 000045-----------------------.
         |                                     ; ;                                      |
         '----------------------000001---------- ----------000001----------------------.|
                                             eof generate                              ||
         ?                                   eof generate                              ??
         .----------------------000046                                                 ||
         |                                output C                                     ||
         |?                               output C                                     ??
         |.---------------------000047                                                 ||
         ||                                 code C                                     ||
         ||?                                code C                                     ??
         ||.--------------------000048                                                 ||
         |||                                 out C                                     ||
 C       ||'--------------------000048                                                 ||
         ||                                 code fa                                    ||
         ||?                                code fa                                    ??
         ||.--------------------000049                                                 ||
         |||                                   : :                                     ||
         |||                                   : :                                     ||
         |||                            variable x                                     ||
         |||?                           variable x                                     ??
         |||.-------------------000050                                                 ||
         ||||                                  : :                                     ||
         |||'-------------------000050---------- ----------000050---------------------.||
         |||                            variable variable                             |||
         |||                                   : :                                    |||
         |||                                               000050---------------------'||
         |||                                   : :                                     ||
         ||'--------------------000049---------- ----------000049---------------------.||
         ||                                 code '('                                  |||
         ||?                                code '('                                  ???
         ||.--------------------000051                                                |||
         |||                                 out '('                                  |||
 (       ||'--------------------000051                                                |||
         ||                                 code set                                  |||
         ||?                                code set                                  ???
         ||.--------------------000052                                                |||
         |||                                 out set                                  |||
 set     ||'--------------------000052                                                |||
         ||                                 code sp                                   |||
         ||?                                code sp                                   ???
         ||                                                000053--------------------.|||
         ||                                 code ' '                                 ||||
         ||?                                code ' '                                 ????
         ||.--------------------000054                                               ||||
         |||                                 out ' '                                 ||||
         ||'--------------------000054                                               ||||
         ||                                                000053--------------------'|||
         ||                                 code a                                    |||
         ||?                                code a                                    ???
         ||.--------------------000055                                                |||
         |||                                 out a                                    |||
 a       ||'--------------------000055                                                |||
         ||                                 code sp                                   |||
         ||?                                code sp                                   ???
         ||                                                000056--------------------.|||
         ||                                 code ' '                                 ||||
         ||?                                code ' '                                 ????
         ||.--------------------000057                                               ||||
         |||                                 out ' '                                 ||||
         ||'--------------------000057                                               ||||
         ||                                                000056--------------------'|||
         ||                                 code f2                                   |||
         ||?                                code f2                                   ???
         ||.--------------------000058                                                |||
         |||                                   : :                                    |||
         |||                                   : :                                    |||
         |||                                   : :                                    |||
         ||'--------------------000058---------- ----------000058--------------------.|||
         ||                                 code '('                                 ||||
         ||?                                code '('                                 ????
         ||.--------------------000059                                               ||||
         |||                                 out '('                                 ||||
 (       ||'--------------------000059                                               ||||
         ||                                 code add                                 ||||
         ||?                                code add                                 ????
         ||.--------------------000060                                               ||||
         |||                                 out add                                 ||||
 add     ||'--------------------000060                                               ||||
         ||                                 code sp                                  ||||
         ||?                                code sp                                  ????
         ||                                                000061-------------------.||||
         ||                                 code ' '                                |||||
         ||?                                code ' '                                ?????
         ||.--------------------000062                                              |||||
         |||                                 out ' '                                |||||
         ||'--------------------000062                                              |||||
         ||                                                000061-------------------'||||
         ||                                 code x                                   ||||
         ||?                                code x                                   ????
         ||.--------------------000063                                               ||||
         |||                                   : :                                   ||||
         ||'--------------------000063---------- ----------000063-------------------.||||
         ||                                 code B                                  |||||
         ||?                                code B                                  ?????
         ||.--------------------000064                                              |||||
         |||                                 out B                                  |||||
 B       ||'--------------------000064                                              |||||
         ||                                                000063-------------------'||||
         ||                                 code sp                                  ||||
         ||?                                code sp                                  ????
         ||                                                000065-------------------.||||
         ||                                 code ' '                                |||||
         ||?                                code ' '                                ?????
         ||.--------------------000066                                              |||||
         |||                                 out ' '                                |||||
         ||'--------------------000066                                              |||||
         ||                                                000065-------------------'||||
         ||                                 code f2                                  ||||
         ||?                                code f2                                  ????
         ||.--------------------000067                                               ||||
         |||                                   : :                                   ||||
         |||                                   : :                                   ||||
         |||                                   : :                                   ||||
         ||'--------------------000067---------- ----------000067-------------------.||||
         ||                                 code '('                                |||||
         ||?                                code '('                                ?????
         ||.--------------------000068                                              |||||
         |||                                 out '('                                |||||
 (       ||'--------------------000068                                              |||||
         ||                                 code mul                                |||||
         ||?                                code mul                                ?????
         ||.--------------------000069                                              |||||
         |||                                 out mul                                |||||
 mul     ||'--------------------000069                                              |||||
         ||                                 code sp                                 |||||
         ||?                                code sp                                 ?????
         ||                                                000070------------------.|||||
         ||                                 code ' '                               ||||||
         ||?                                code ' '                               ??????
         ||.--------------------000071                                             ||||||
         |||                                 out ' '                               ||||||
         ||'--------------------000071                                             ||||||
         ||                                                000070------------------'|||||
         ||                                 code f2                                 |||||
         ||?                                code f2                                 ?????
         ||.--------------------000072                                              |||||
         |||                                   : :                                  |||||
         |||                                   : :                                  |||||
         |||                                   : :                                  |||||
         ||'--------------------000072---------- ----------000072------------------.|||||
         ||                                 code '('                               ||||||
         ||?                                code '('                               ??????
         ||.--------------------000073                                             ||||||
         |||                                 out '('                               ||||||
 (       ||'--------------------000073                                             ||||||
         ||                                 code sub                               ||||||
         ||?                                code sub                               ??????
         ||.--------------------000074                                             ||||||
         |||                                 out sub                               ||||||
 sub     ||'--------------------000074                                             ||||||
         ||                                 code sp                                ||||||
         ||?                                code sp                                ??????
         ||                                                000075-----------------.||||||
         ||                                 code ' '                              |||||||
         ||?                                code ' '                              ???????
         ||.--------------------000076                                            |||||||
         |||                                 out ' '                              |||||||
         ||'--------------------000076                                            |||||||
         ||                                                000075-----------------'||||||
         ||                                 code n                                 ||||||
         ||?                                code n                                 ??????
         ||.--------------------000077                                             ||||||
         |||                                   : :                                 ||||||
         ||'--------------------000077---------- ----------000077-----------------.||||||
         ||                                 code 1                                |||||||
         ||?                                code 1                                ???????
         ||.--------------------000078                                            |||||||
         |||                                 out 1                                |||||||
 1       ||'--------------------000078                                            |||||||
         ||                                                000077-----------------'||||||
         ||                                 code sp                                ||||||
         ||?                                code sp                                ??????
         ||                                                000079-----------------.||||||
         ||                                 code ' '                              |||||||
         ||?                                code ' '                              ???????
         ||.--------------------000080                                            |||||||
         |||                                 out ' '                              |||||||
         ||'--------------------000080                                            |||||||
         ||                                                000079-----------------'||||||
         ||                                 code f2                                ||||||
         ||?                                code f2                                ??????
         ||.--------------------000081                                             ||||||
         |||                                   : :                                 ||||||
         |||                                   : :                                 ||||||
         |||                                   : :                                 ||||||
         ||'--------------------000081---------- ----------000081-----------------.||||||
         ||                                 code '('                              |||||||
         ||?                                code '('                              ???????
         ||.--------------------000082                                            |||||||
         |||                                 out '('                              |||||||
 (       ||'--------------------000082                                            |||||||
         ||                                 code div                              |||||||
         ||?                                code div                              ???????
         ||.--------------------000083                                            |||||||
         |||                                 out div                              |||||||
 div     ||'--------------------000083                                            |||||||
         ||                                 code sp                               |||||||
         ||?                                code sp                               ???????
         ||                                                000084----------------.|||||||
         ||                                 code ' '                             ||||||||
         ||?                                code ' '                             ????????
         ||.--------------------000085                                           ||||||||
         |||                                 out ' '                             ||||||||
         ||'--------------------000085                                           ||||||||
         ||                                                000084----------------'|||||||
         ||                                 code n                                |||||||
         ||?                                code n                                ???????
         ||.--------------------000086                                            |||||||
         |||                                   : :                                |||||||
         ||'--------------------000086---------- ----------000086----------------.|||||||
         ||                                 code 1                               ||||||||
         ||?                                code 1                               ????????
         ||.--------------------000087                                           ||||||||
         |||                                 out 1                               ||||||||
 1       ||'--------------------000087                                           ||||||||
         ||                                                000086----------------'|||||||
         ||                                 code sp                               |||||||
         ||?                                code sp                               ???????
         ||                                                000088----------------.|||||||
         ||                                 code ' '                             ||||||||
         ||?                                code ' '                             ????????
         ||.--------------------000089                                           ||||||||
         |||                                 out ' '                             ||||||||
         ||'--------------------000089                                           ||||||||
         ||                                                000088----------------'|||||||
         ||                                 code x                                |||||||
         ||?                                code x                                ???????
         ||.--------------------000090                                            |||||||
         |||                                   : :                                |||||||
         ||'--------------------000090---------- ----------000090----------------.|||||||
         ||                                 code x                               ||||||||
         ||?                                code x                               ????????
         ||.--------------------000091                                           ||||||||
         |||                                 out x                               ||||||||
 x       ||'--------------------000091                                           ||||||||
         ||                                                000090----------------'|||||||
         ||                                 code ')'                              |||||||
         ||?                                code ')'                              ???????
         ||.--------------------000092                                            |||||||
         |||                                 out ')'                              |||||||
 )       ||'--------------------000092                                            |||||||
         ||                                                000081-----------------'||||||
         ||                                 code ')'                               ||||||
         ||?                                code ')'                               ??????
         ||.--------------------000093                                             ||||||
         |||                                 out ')'                               ||||||
 )       ||'--------------------000093                                             ||||||
         ||                                                000072------------------'|||||
         ||                                 code sp                                 |||||
         ||?                                code sp                                 ?????
         ||                                                000094------------------.|||||
         ||                                 code ' '                               ||||||
         ||?                                code ' '                               ??????
         ||.--------------------000095                                             ||||||
         |||                                 out ' '                               ||||||
         ||'--------------------000095                                             ||||||
         ||                                                000094------------------'|||||
         ||                                 code n                                  |||||
         ||?                                code n                                  ?????
         ||.--------------------000096                                              |||||
         |||                                   : :                                  |||||
         ||'--------------------000096---------- ----------000096------------------.|||||
         ||                                 code 2                                 ||||||
         ||?                                code 2                                 ??????
         ||.--------------------000097                                             ||||||
         |||                                 out 2                                 ||||||
 2       ||'--------------------000097                                             ||||||
         ||                                                000096------------------'|||||
         ||                                 code ')'                                |||||
         ||?                                code ')'                                ?????
         ||.--------------------000098                                              |||||
         |||                                 out ')'                                |||||
 )       ||'--------------------000098                                              |||||
         ||                                                000067-------------------'||||
         ||                                 code ')'                                 ||||
         ||?                                code ')'                                 ????
         ||.--------------------000099                                               ||||
         |||                                 out ')'                                 ||||
 )       ||'--------------------000099                                               ||||
         ||                                                000058--------------------'|||
         ||                                 code ')'                                  |||
         ||?                                code ')'                                  ???
         ||.--------------------000100                                                |||
         |||                                 out ')'                                  |||
 )       ||'--------------------000100                                                |||
         ||                                                000049---------------------'||
         ||                                 code nl                                    ||
         ||?                                code nl                                    ??
         ||                                                000101---------------------.||
         ||                                 code '\n'                                 |||
         ||?                                code '\n'                                 ???
         ||.--------------------000102                                                |||
         |||                                 out '\n'                                 |||
         ||'--------------------000102                                                |||
         ||                                                000101---------------------'||
         ||                                 code eoc                                   ||
         ||?                                code eoc                                   ??
         ||                                                000103---------------------.||
         ||                                 code code                                 |||
         |'---------------------000047---------- ----------000047--------------------.|||
         |                                output output                              ||||
         '----------------------000046                                               ||||
                                                           000047--------------------'|||
                                                           000103---------------------'||
                                                           000001----------------------'|
                                                           000045-----------------------'
                                             eof '\n'
         ?                                   eof '\n'
                                             eof eof
 [user@machine web]$
home