arcanum_jp’s blog

おっさんの日記

Edit Area

 syntax definition file を作ってみた。何にしようかなと迷ったが、MSX BASICとZ80Aマシン語なんてのが簡単そうでちょうどいいかなと思った。


 正直BASICはvb.jsとbasic.jsがあるので挑戦し甲斐がないし、マシン語ニーモニック表を手に入れれば簡単かなと思いマシン語ニーモニック表を探した。「やっぱり、8ビット時代の生き残りは最後はマシン語だよね、アセンブラ買えない小中学生はよくハンドアセンブルしたっけなぁ・・・」とか昔を思いながら探したけど、いいのが見つからない。


 しょうがないのでbasic.jsを元にMSX BASICのsyntax definition file を作ってみる事にした。手元にBASIC言語命令表があるわけではないのでhttp://msx.msの資料を基にチマチマと作ってみた。って、basic.jsの中から明らかに記憶の無い命令を消して、資料のものを足しただけ。でも結構面白い。

editAreaLoader.load_syntax["msx"] = {
	'COMMENT_SINGLE' : {1 : "'", 2 : 'rem', 3 : 'REM'}
	,'COMMENT_MULTI' : { }
	,'QUOTEMARKS' : {1:'"'}
	,'KEYWORD_CASE_SENSITIVE' : false
	,'KEYWORDS' : {
		'statements' : [
			'if','then','for',
			'else','elseif',
			'next','step','to', 'call'
		]
		,'keywords' : [
			'exit', 'dim', 'as',
			'base', 'beep', 'binary', 'bload', 'bsave',
			'circle', 'clear', 'close', 'cls', 'color',
			'com', 'data', 'date','defint', 'deflng', 
			'defsng', 'defstr', 'draw', 'erase', 'error',
			'files', 'get', 'gosub', 'goto', 'key',
			'kill', 'let', 'line', 'list', 'locate',
			'lprint', 'lset', 'off', 'on', 'open',
			'out', 'output', 'paint', 'palette',
			'poke', 'preset', 'print', 'pset', 'put',
			'randomize', 'read', 'reset', 'restore',
			'return', 'rset', 'run', 'screen',
			'sound', 'stop', 'strig', 'string', 'swap', 
			'system', 'time', 'timer', 'troff', 'tron', 
			'type', 'using', 'wait', 'width', 'sprite',
			'interval', 'list', 'llist', 'lprint', 'motor',
			'new'
	        ]
		,'functions' : [
			'abs', 'asc', 'atn', 'auto','chr', 'cint',
			'cos', 'eof', 'exp', 'fix', 'fre', 'hex', 
			'inkey', 'imp', 'input', 'instr', 'int',
			'left', 'len', 'mid', 'oct', 'peek','play', 
			'point', 'pos', 'right', 'rnd', 'seek', 
			'sgn', 'sin', 'space', 'spc', 'sqr', 
			'stick', 'str', 'tab', 'tan', 'val'
		]
		,'operators' : [
			'and', 'mod', 'not', 'or', 'xor'
		]
	}
	,'OPERATORS' :[
		'+', '-', '/', '*', '=', '<', '>', '!', '&', '~'
	]
	,'DELIMITERS' :[
		'(', ')', '[', ']', ':', ';'
	]
	,'STYLES' : {
		'COMMENTS'    : 'color: #99CC00;font-style:italic;'
		,'QUOTESMARKS': 'color: #333399;'
		,'KEYWORDS' : {
			'keywords'    : 'color: #3366FF;font-weight:bold;'
			,'functions'  : 'color: #0000FF;font-weight:bold;'
			,'statements' : 'color: #3366FF;font-weight:bold;'
			,'operators'  : 'color: #FF0000;font-weight:bold;'
			}
		,'OPERATORS'  : 'color: #FF0000;'
		,'DELIMITERS' : 'color: #0000FF;'
	}
};

 結構懐かしい命令があるなぁ・・・SPRITEなんてのはMSX特有で使いこなせば非常によかった命令だし、MOTORなんて通だよね。パソコンからカセットレコーダを動かす命令だけど、あまり使わなかったな。使えそうで案外使えなかったのがTRON/TROFFかな。TRONって言ってもi-Tronとかじゃなくてトレースオンの略ね)そんな事を考えながら夜が更けていく。あ・・・嫁はん寝ちゃった・・・


 この中で、'KEYWORD_CASE_SENSITIVE' : falseにした場合にコメント識別子はBASICでは'''のほかに'rem'もあるけど、小文字のremだけではハイライトが化けてうまくいかず、大文字のREMも登録したことに注意するぐらいかな。

'COMMENT_SINGLE' : {1 : "'", 2 : 'rem', 3 : 'REM'}
                               ~~~~~~~~~~~~~~~~~~~~
,'KEYWORD_CASE_SENSITIVE' : false