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