Created
December 25, 2011 11:54
-
-
Save eidas/1519139 to your computer and use it in GitHub Desktop.
SMILE BASIC キーワードカウンタ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# sbcountmk2.py : Smile Basic mk2のキーワード出現頻度を調べる | |
import re, sys, codecs | |
# グローバル変数定義 | |
iflag = False | |
dic = {} | |
# カウントリストの初期化 | |
def init_dic(): | |
for key in keywords_list: | |
dic[key] = 0 | |
# キーワード出現頻度のカウント | |
def countup_keyword(key): | |
if key in dic: | |
dic[key] += 1 | |
else: | |
dic[key] = 1 | |
# 出現カウントの出力 | |
def print_count(): | |
key_list = dic.keys() | |
key_list.sort() | |
for key in key_list: | |
sys.stdout.write('|') | |
sys.stdout.write('%8s ' % key) | |
sys.stdout.write('|') | |
sys.stdout.write('%8d' % dic[key]) | |
sys.stdout.write('|') | |
sys.stdout.write('\n') | |
# キーワードリストの定義 | |
keywords_list = [ | |
"CLEAR","LET","DIM","REM","KEY","VSYNC", | |
"ON","GOTO","GOSUB","RETURN","STOP","END", | |
"FOR","TO","STEP","NEXT","IF","THEN","ELSE", | |
"READ","DATA","RESTORE","TMREAD","DTREAD", | |
"CLS","COLOR","LOCATE","PRINT","CHKCHR", | |
"SWAP","SORT","RSORT","STRIG","BREPEAT", | |
"BUTTON","INKEY$","INPUT","LINPUT", | |
"LOAD","SAVE","DELETE","EXEC","RENAME","APPEND", | |
"RECVFILE","SENDFILE","ACLS", | |
"VISIBLE","COLINIT","COLSET","COLREAD","CHRINIT","CHRSET","CHRREAD", | |
"SPPAGE","SPSET","SPCLR", | |
"SPOFS","SPCHR","SPANIM","SPANGLE","SPSCALE","SPCHK", | |
"SPREAD","SPSETV","SPGETV","SPHOME", | |
"SPCOL","SPCOLVEC","SPHITSP","SPHIT","SPHITRC", | |
"BGPAGE","BGCLIP","BGOFS","BGPUT","BGREAD", | |
"BGFILL","BGCLR","BGCHK","BGCOPY", | |
"GPAGE","GCOLOR","GCLS","GSPOIT", | |
"GPSET","GPAINT","GLINE","GBOX","GFILL","GCIRCLE","GPUTCHR", | |
"GDRAWMD","GPRIO","GCOPY", | |
"BEEP","BGMPLAY","BGMSTOP","BGMCHK", | |
"BGMSET","BGMSETD","BGMCLEAR","BGMSETV","BGMGETV","BMGPRG", | |
"TALK","TALKSTOP","TALKCHK", | |
"PNLTYPE","PNLSTR","ICONSET","ICONCLR","ICONCHK", | |
"ASC","CHR$","VAL","STR$","HEX$","MID$", | |
"LEFT$","RIGHT$","INSTR$","SUBST$", | |
"LEN","FLOOR","RND","ABS","SGN","SQR","EXP","LOG", | |
"PI","RAD","DEG","SIN","COS","TAN","ATAN","POW", | |
"CSRX","CSRY","FREEMEM","VERSION","ERR","ERL","RESULT", | |
"TCHX","TCHY","TCHST","TCHTIME","MAINCNTL","MAINCNTH", | |
"TABSTOP","TRUE","FALSE","CANCEL","ICONPUSE","ICONPAGE","ICONMAX", | |
"FUNCNO","FREEVAR","SYSBEEP", | |
"KEYBOARD","SPHITNO","SPHITX","SPHITY","SPHITT", | |
"TIME$","DATE$","MEM$","PRGNAME$","PACKAGE$" | |
] | |
print keywords_list.count | |
# メイン | |
init_dic() | |
f=codecs.open('petitcom.txt','r','utf-8') | |
lbldel=re.compile('^@.*$',iflag) | |
qtdel=re.compile('".*?"',iflag) | |
remdel=re.compile("(REM\s|').*$",iflag) | |
spl=re.compile('[A-Z]+\$?',iflag) | |
for m in f: | |
l=unicode(m) | |
print l, | |
l=l.replace(u'↓',u'\n') | |
for row in l.splitlines(): | |
row=row.upper() | |
row=lbldel.sub(' ',row) | |
row=qtdel.sub(' ',row) | |
row=remdel.sub(' REM ',row) | |
row=spl.findall(row) | |
for key in row: | |
if key in keywords_list: | |
countup_keyword(key) | |
f.close() | |
print '-----------------' | |
print_count() |
2012.03.11
プチコン用キーワード出現頻度カウンタをちょこっと修正しました。
今回からはキーワードリストに入っているキーワードは、プログラムリスト中にあってもなくても、最後の出力に出てくるようになります。つまり、使ってないキーワードは回数0として出力されるようになります。
これであとどのキーワードを使えばよいかがより明確にわかるようになりました。
プログラムはPythonで書いてありますが、例によって2.6.1でしかテストしてません。バージョン3以上では動かないと思います。(テストしてないのでわからないですがw)
2012.03.14
プチコンmkⅡ用のキーワードを追加しました。
間違ってなければ、プログラム中で使えるキーワードは172個のはず。
(実は前のバージョンまではIFとTHENがキーワードからもれてました。なぜそんなメジャーなのがもれてたのか不明)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
2011.12.25 1画面プログラムや140文字プログラムで多用する、コロンを省略する書き方に対応していなかったため、早速修正しました。