Skip to content

Instantly share code, notes, and snippets.

@eidas
Created December 25, 2011 11:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eidas/1519139 to your computer and use it in GitHub Desktop.
Save eidas/1519139 to your computer and use it in GitHub Desktop.
SMILE BASIC キーワードカウンタ
# -*- 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 '-----------------'
print_count()
@eidas
Copy link
Author

eidas commented Dec 25, 2011

2011.12.25 Pythonの勉強を兼ねて、SMILE BASICのキーワード出現頻度カウンタを作成した。
とりあえず動く最初の版。スクリプトと同じフォルダに petitcom.txt の名前でソースを書き込んだテキストファイルを置くべし。
なお、エンコーディングはutf-8、改行コードはLF (UNIX/LINUX)とする。

@eidas
Copy link
Author

eidas commented Dec 25, 2011

2011.12.25 1画面プログラムや140文字プログラムで多用する、コロンを省略する書き方に対応していなかったため、早速修正しました。

@eidas
Copy link
Author

eidas commented Mar 10, 2012

2012.03.11
プチコン用キーワード出現頻度カウンタをちょこっと修正しました。
今回からはキーワードリストに入っているキーワードは、プログラムリスト中にあってもなくても、最後の出力に出てくるようになります。つまり、使ってないキーワードは回数0として出力されるようになります。
これであとどのキーワードを使えばよいかがより明確にわかるようになりました。

プログラムはPythonで書いてありますが、例によって2.6.1でしかテストしてません。バージョン3以上では動かないと思います。(テストしてないのでわからないですがw)

@eidas
Copy link
Author

eidas commented Mar 13, 2012

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