2019年12月16日月曜日

pythonの変数を日本語化の実装その1


前回構想に基づいた実装です。変数の頭とそれ以外で、禁止文字が異なるので、tableは、2回に分けて生成します。連続charは、一まとめにしたC++2次元テーブルを生成するようにしています。
以下は、頭文字禁止の場合のtable生成コードです。
python3 first.py> test.txt で生成されるtableをそのままC++ソースに貼り付けています。
頭禁止で、6万、頭以外で10万程度しかありませんでした。ユニコード全体でも高々100万程度のオーダです。意外に多くはないです。

後は、unf8をutf32に変換し、table参照してinvalid charだったらスキップして、prefixを付加します。

from collections import defaultdict
import unicodedata



vlist=[]
b=0
f=0
print ('int first_inhibit_chars[][2]={')

for i in range(0x10Ffff):
 

    try:

        #s='AAA'
        #s+=chr(i)+'BBB' +'=1'
        s=chr(i)+'AAA=1'
        exec(s)#

        vlist.append(i)
        
    except:
 
        continue


#print(len(vlist))        
b=0
f=0
for i in vlist:
    if i==35:
        continue

    if b==0:
        f=i
        print ('{',f)
        
    else:
        if i !=f+b:
            f=i
            print (',',b,'}')
            print (',{',i,end='')
            b=0         
    b+=1                   
print(',',b,'}')
print('};')        

0 件のコメント:

コメントを投稿