|
|
1.1 root 1: -title mincpp: translate minimal conditional assembly stuff to cpp format
2: *
3: * This program takes a MINIMAL program and translates all
4: * conditional assembly statements to a format acceptable to
5: * the C preprocessor (cpp).
6: *
7: * MINIMAL CPP
8: *
9: * .IF sym #ifdef sym
10: * .THEN {nothing}
11: * .ELSE #else
12: * .FI #endif
13: * .DEF sym #define sym 1
14: * .UNDEF sym #undef sym
15: *
16: * Luckily, all MINIMAL conditional assembly statements start
17: * with a "." in column 1.
18: *
19: &stlimit = -1
20: &anchor = 1
21: *
22: * build translation table.
23: *
24: castbl = table( 5 )
25: castbl['IF'] = '#ifdef'
26: castbl['ELSE'] = '#else'
27: castbl['FI'] = '#endif'
28: castbl['DEF'] = '#define'
29: castbl['UNDEF'] = '#undef'
30: *
31: * obtain input and output files.
32: *
33: terminal = 'enter minimal input file'
34: input(.in,0,terminal)
35: terminal = 'enter minimal/cpp output file'
36: output(.out,1,terminal)
37: *
38: * read statements and do quick check.
39: *
40: main line = in :f(done)
41: leq( substr(line,1,1),'.' ) :s(castmt)
42: out = line :(main)
43: *
44: * here to do real translation
45: *
46: castmt opcode = symbol =
47: line len(1) ( break( ' ' ) | rem ) . opcode
48: + ( span( ' ' ) | '' )
49: + ( ( len( 1 ) | '' ) rem . symbol ) :f(error)
50: opcode = castbl[opcode]
51: out = differ( opcode ) opcode ' ' symbol
52: + (ident( opcode,'#define' ) ' 1','' ) :(main)
53: *
54: * on error, show offensive line to person at teminal
55: *
56: error terminal = 'error: ' line :(main)
57: done
58: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.