前回構想に基づいた実装です。変数の頭とそれ以外で、禁止文字が異なるので、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 件のコメント:
コメントを投稿