Semplice convertitore di codifica tra ELEA e il Formato di Transizione Unicode a 8-bit
This commit is contained in:
parent
fdb31afeb4
commit
22dae62ee7
9 changed files with 174 additions and 76 deletions
21
Makefile
21
Makefile
|
@ -1,8 +1,25 @@
|
||||||
CC=gcc
|
CC=gcc
|
||||||
|
CFLAGS=-g
|
||||||
|
LDFLAGS=-g
|
||||||
|
|
||||||
elea: elea.o governo.o accumulatore.o memoria.o ricerca.o algebra.o telescrivente.o
|
elea: \
|
||||||
|
elea.o \
|
||||||
|
governo.o \
|
||||||
|
accumulatore.o \
|
||||||
|
memoria.o \
|
||||||
|
ricerca.o \
|
||||||
|
algebra.o \
|
||||||
|
telescrivente.o \
|
||||||
|
hello_world.o \
|
||||||
|
long_division.o
|
||||||
|
|
||||||
|
hello_world.c: hello_world.elea-txt caratteri.py
|
||||||
|
python caratteri.py $<
|
||||||
|
|
||||||
|
long_division.c: long_division.elea-txt caratteri.py
|
||||||
|
python caratteri.py $<
|
||||||
|
|
||||||
clean: FORCE
|
clean: FORCE
|
||||||
@rm -f elea *.o tags
|
@rm -f elea *.o tags hello_world.c long_division.c
|
||||||
|
|
||||||
.PHONY: FORCE
|
.PHONY: FORCE
|
||||||
|
|
129
caratteri.py
129
caratteri.py
|
@ -1,77 +1,18 @@
|
||||||
# coding=utf8
|
# coding=utf8
|
||||||
|
|
||||||
|
import sys
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
caratteri = [
|
mappa_caratteri = [
|
||||||
('0', 'CAR_ZERO'),
|
"0", "1", "~", "2", "4", "+", "#", "3", "5", "6", "/", "7", "9", "-", "÷", "8",
|
||||||
('1', 'CAR_UNO'),
|
"Φ", "A", "δ", "B", "D", "=", "α", "C", "E", "F", "%", "G", "I", ",", "γ", "H",
|
||||||
('~', 'CAR_ONDA'),
|
".", "S", "θ", "T", "V", "!", ")", "U", "W", "X", "?", "Y", "\'", "&", "⊗", "Z",
|
||||||
('2', 'CAR_DUE'),
|
"ε", "J", "*", "K", "M", "(", "β", "L", "N", "O", "$", "η", "R", "P", "π", "Q"
|
||||||
('4', 'CAR_QUATTRO'),
|
|
||||||
('+', 'CAR_PIU'),
|
|
||||||
('#', 'CAR_DIESIS'),
|
|
||||||
('3', 'CAR_TRE'),
|
|
||||||
('5', 'CAR_CINQUE'),
|
|
||||||
('6', 'CAR_SEI'),
|
|
||||||
('/', 'CAR_BARRA'),
|
|
||||||
('-', 'CAR_MENO'),
|
|
||||||
('7', 'CAR_SETTE'),
|
|
||||||
('9', 'CAR_NOVE'),
|
|
||||||
('÷', 'CAR_DIVISO'),
|
|
||||||
('8', 'CAR_OTTO'),
|
|
||||||
('Φ', 'CAR_PHI'),
|
|
||||||
('A', 'CAR_A'),
|
|
||||||
('δ', 'CAR_DELTA'),
|
|
||||||
('B', 'CAR_B'),
|
|
||||||
('D', 'CAR_D'),
|
|
||||||
('=', 'CAR_UGUALE'),
|
|
||||||
('α', 'CAR_ALFA'),
|
|
||||||
('C', 'CAR_C'),
|
|
||||||
('E', 'CAR_E'),
|
|
||||||
('F', 'CAR_F'),
|
|
||||||
('%', 'CAR_PERCENTO'),
|
|
||||||
(',', 'CAR_VIRGOLA'),
|
|
||||||
('G', 'CAR_G'),
|
|
||||||
('I', 'CAR_I'),
|
|
||||||
('γ', 'CAR_GAMMA'),
|
|
||||||
('H', 'CAR_H'),
|
|
||||||
('.', 'CAR_PUNTO'),
|
|
||||||
('S', 'CAR_S'),
|
|
||||||
('θ', 'CAR_TETA'),
|
|
||||||
('T', 'CAR_T'),
|
|
||||||
('V', 'CAR_V'),
|
|
||||||
('!', 'CAR_ESCLAMATIVO'),
|
|
||||||
(')', 'CAR_CHIUSA_PARENTESI'),
|
|
||||||
('U', 'CAR_U'),
|
|
||||||
('W', 'CAR_W'),
|
|
||||||
('X', 'CAR_X'),
|
|
||||||
('?', 'CAR_INTERROGATIVO'),
|
|
||||||
('&', 'CAR_E_COMMERCIALE'),
|
|
||||||
('Y', 'CAR_Y'),
|
|
||||||
("'", 'CAR_APOSTROFO'),
|
|
||||||
('⊗', 'CAR_MOLTIPLICATO_PER'),
|
|
||||||
('Z', 'CAR_Z'),
|
|
||||||
('ε', 'CAR_EPSILON'),
|
|
||||||
('J', 'CAR_J'),
|
|
||||||
('*', 'CAR_ASTERISCO'),
|
|
||||||
('K', 'CAR_K'),
|
|
||||||
('M', 'CAR_M'),
|
|
||||||
('(', 'CAR_APERTA_PARENTESI'),
|
|
||||||
('β', 'CAR_BETA'),
|
|
||||||
('L', 'CAR_L'),
|
|
||||||
('N', 'CAR_N'),
|
|
||||||
('O', 'CAR_O'),
|
|
||||||
('$', 'CAR_DOLLARO'),
|
|
||||||
('P', 'CAR_P'),
|
|
||||||
('η', 'CAR_ETA'),
|
|
||||||
('R', 'CAR_R'),
|
|
||||||
('π', 'CAR_PI'),
|
|
||||||
('Q', 'CAR_Q'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
caratteri_python_a_elea = {
|
caratteri_python_a_elea = {
|
||||||
caratteri[i][0].decode('utf-8'): caratteri[i] + (i,)
|
char.decode('utf-8'): idx
|
||||||
for i in xrange(len(caratteri)) }
|
for idx, char in enumerate(mappa_caratteri) }
|
||||||
|
|
||||||
def stringa_python_a_elea(string):
|
def stringa_python_a_elea(string):
|
||||||
s = []
|
s = []
|
||||||
|
@ -82,18 +23,58 @@ def stringa_python_a_elea(string):
|
||||||
|
|
||||||
xx = caratteri_python_a_elea.get(i, None)
|
xx = caratteri_python_a_elea.get(i, None)
|
||||||
if xx is None:
|
if xx is None:
|
||||||
print "NO", repr(i)
|
raise Exception("carattere %s non mappato" % i)
|
||||||
continue
|
|
||||||
|
|
||||||
s.append(xx)
|
s.append(xx)
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
||||||
hello_world = """
|
def elea_a_c(l):
|
||||||
11 017 # Φ
|
l2 = ('%3d,' % i for i in l)
|
||||||
0X XXX # 0
|
return ' ' + ' '.join(l2)
|
||||||
HELLO.WORLD
|
|
||||||
|
def stringa_elea_a_c(l):
|
||||||
|
e = stringa_python_a_elea(l)
|
||||||
|
e2 = elea_a_c(e)
|
||||||
|
return e2 + " /* " + l + " */"
|
||||||
|
|
||||||
|
PROLOGO = """#include "elea_tipi.h"
|
||||||
|
|
||||||
|
const carattere %s[] = {
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pprint(stringa_python_a_elea(hello_world))
|
EPILOGO = """};
|
||||||
|
|
||||||
|
const int %s_lunghezza = sizeof(%s) / sizeof(carattere);
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def txt_to_c(stringa_txt, nome):
|
||||||
|
x = []
|
||||||
|
x += (PROLOGO % nome).splitlines()
|
||||||
|
|
||||||
|
for line in stringa_txt.splitlines():
|
||||||
|
l2 = line.strip()
|
||||||
|
if len(l2) == 0: continue
|
||||||
|
x.append(stringa_elea_a_c(l2))
|
||||||
|
|
||||||
|
x += (EPILOGO % (nome, nome)).splitlines()
|
||||||
|
|
||||||
|
return '\n'.join(x)
|
||||||
|
|
||||||
|
def converti(nomefile):
|
||||||
|
nome = nomefile.split('.', 1)[0]
|
||||||
|
x = open(nomefile).read()
|
||||||
|
c = txt_to_c(x, nome)
|
||||||
|
open('%s.c' % nome, 'w').write(c)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
nomefile = sys.argv[1]
|
||||||
|
except:
|
||||||
|
print "converte da txt in elea -> file c\n"
|
||||||
|
print "usaggio: %s nomefile.txt"
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
converti(nomefile)
|
||||||
|
|
||||||
|
|
10
elea.c
10
elea.c
|
@ -4,6 +4,12 @@
|
||||||
#include "memoria.h"
|
#include "memoria.h"
|
||||||
#include "codifica_istruzioni.h"
|
#include "codifica_istruzioni.h"
|
||||||
|
|
||||||
|
extern const carattere hello_world[];
|
||||||
|
extern const int hello_world_lunghezza;
|
||||||
|
|
||||||
|
extern const carattere long_division[];
|
||||||
|
extern const int long_division_lunghezza;
|
||||||
|
|
||||||
/* main */
|
/* main */
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -39,5 +45,9 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
/* Esegue l'istruzione phi */
|
/* Esegue l'istruzione phi */
|
||||||
op_ms(&istr);
|
op_ms(&istr);
|
||||||
|
|
||||||
|
mem_scrivi_blocco(1, hello_world, hello_world_lunghezza);
|
||||||
|
mem_scrivi_blocco(100, long_division, long_division_lunghezza);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
9
hello_world.c
Normal file
9
hello_world.c
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#include "elea_tipi.h"
|
||||||
|
|
||||||
|
const carattere hello_world[] = {
|
||||||
|
1, 1, 0, 0, 1, 11, 6, 16, /* 11 0017 # Φ */
|
||||||
|
0, 41, 41, 41, 41, 41, 6, 0, /* 0X XXXX # 0 */
|
||||||
|
31, 24, 55, 55, 57, 40, 57, 60, 55, 20, /* HELLO WORLD */
|
||||||
|
};
|
||||||
|
|
||||||
|
const int hello_world_lunghezza = sizeof(hello_world) / sizeof(carattere);
|
4
hello_world.elea-txt
Normal file
4
hello_world.elea-txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
11 0017 # Φ
|
||||||
|
0X XXXX # 0
|
||||||
|
HELLO WORLD
|
||||||
|
|
37
long_division.c
Normal file
37
long_division.c
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#include "elea_tipi.h"
|
||||||
|
|
||||||
|
const carattere long_division[] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, /* 00 0000 0 0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, /* 00 0000 0 0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 1, 58, /* 00 0000 1 $ */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, /* 00 0000 0 0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, /* 00 0000 0 0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, /* 00 0000 0 0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, /* 00 0000 0 0 */
|
||||||
|
0, 0, 0, 0, 0, 0, 6, 17, /* 00 0000 # A */
|
||||||
|
1, 4, 0, 1, 9, 0, 6, 25, /* 14 0160 # F */
|
||||||
|
0, 1, 0, 3, 3, 9, 6, 18, /* 01 0226 # δ */
|
||||||
|
3, 3, 0, 1, 4, 9, 6, 25, /* 22 0146 # F */
|
||||||
|
0, 1, 0, 3, 1, 15, 6, 18, /* 01 0218 # δ */
|
||||||
|
3, 3, 6, 6, 6, 6, 6, 14, /* 22 #### # ÷ */
|
||||||
|
0, 0, 0, 1, 4, 9, 6, 1, /* 00 0146 # 1 */
|
||||||
|
14, 14, 0, 0, 13, 13, 0, 12, /* ÷÷ 00-- 0 9 */
|
||||||
|
14, 14, 0, 0, 13, 13, 0, 4, /* ÷÷ 00-- 0 4 */
|
||||||
|
14, 14, 0, 1, 4, 9, 16, 12, /* ÷÷ 0146 Φ 9 */
|
||||||
|
4, 0, 0, 3, 8, 0, 6, 43, /* 40 0250 # Y */
|
||||||
|
14, 14, 13, 13, 13, 13, 16, 4, /* ÷÷ ---- Φ 4 */
|
||||||
|
6, 6, 0, 1, 4, 9, 16, 8, /* ## 0146 Φ 5 */
|
||||||
|
35, 6, 0, 0, 1, 8, 32, 0, /* T# 0015 . 0 */
|
||||||
|
6, 6, 6, 6, 0, 0, 0, 17, /* ## ##00 0 A */
|
||||||
|
1, 4, 0, 1, 9, 0, 6, 31, /* 14 0160 # H */
|
||||||
|
40, 6, 0, 7, 3, 4, 6, 0, /* W# 0324 # 0 */
|
||||||
|
58, 61, 0, 1, 3, 7, 6, 14, /* $P 0123 # ÷ */
|
||||||
|
0, 0, 0, 0, 0, 0, 16, 7, /* 00 0000 Φ 3 */
|
||||||
|
38, 6, 0, 3, 15, 4, 6, 0, /* )# 0284 # 0 */
|
||||||
|
1, 4, 0, 1, 9, 0, 6, 23, /* 14 0160 # C */
|
||||||
|
14, 14, 0, 0, 0, 1, 0, 4, /* ÷÷ 0001 0 4 */
|
||||||
|
14, 14, 0, 0, 0, 1, 16, 5, /* ÷÷ 0001 Φ + */
|
||||||
|
38, 6, 0, 1, 9, 0, 6, 0, /* )# 0160 # 0 */
|
||||||
|
};
|
||||||
|
|
||||||
|
const int long_division_lunghezza = sizeof(long_division) / sizeof(carattere);
|
32
long_division.elea-txt
Normal file
32
long_division.elea-txt
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
00 0000 0 0
|
||||||
|
00 0000 0 0
|
||||||
|
00 0000 1 $
|
||||||
|
00 0000 0 0
|
||||||
|
00 0000 0 0
|
||||||
|
00 0000 0 0
|
||||||
|
00 0000 0 0
|
||||||
|
00 0000 # A
|
||||||
|
14 0160 # F
|
||||||
|
01 0226 # δ
|
||||||
|
22 0146 # F
|
||||||
|
01 0218 # δ
|
||||||
|
22 #### # ÷
|
||||||
|
00 0146 # 1
|
||||||
|
÷÷ 00-- 0 9
|
||||||
|
÷÷ 00-- 0 4
|
||||||
|
÷÷ 0146 Φ 9
|
||||||
|
40 0250 # Y
|
||||||
|
÷÷ ---- Φ 4
|
||||||
|
## 0146 Φ 5
|
||||||
|
T# 0015 . 0
|
||||||
|
## ##00 0 A
|
||||||
|
14 0160 # H
|
||||||
|
W# 0324 # 0
|
||||||
|
$P 0123 # ÷
|
||||||
|
00 0000 Φ 3
|
||||||
|
)# 0284 # 0
|
||||||
|
14 0160 # C
|
||||||
|
÷÷ 0001 0 4
|
||||||
|
÷÷ 0001 Φ +
|
||||||
|
)# 0160 # 0
|
||||||
|
|
|
@ -39,3 +39,10 @@ void mem_scrivi_carattere(uint32_t ind, carattere c)
|
||||||
{
|
{
|
||||||
M[ind] = c;
|
M[ind] = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mem_scrivi_blocco(uint32_t ind, const carattere * blocco, int lunghezza)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < lunghezza; i++)
|
||||||
|
mem_scrivi_carattere(ind + i, blocco[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,5 +10,6 @@ int op_meno_mm(istruzione *i);
|
||||||
/* Accesso diretto alla memoria */
|
/* Accesso diretto alla memoria */
|
||||||
carattere mem_leggi_carattere(uint32_t ind);
|
carattere mem_leggi_carattere(uint32_t ind);
|
||||||
void mem_scrivi_carattere(uint32_t ind, carattere c);
|
void mem_scrivi_carattere(uint32_t ind, carattere c);
|
||||||
|
void mem_scrivi_blocco(uint32_t ind, const carattere * blocco, int lunghezza);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue