デバッグ時のコマンドライン引数対応するのと、ワイド文字への対応を実装した。
プロパティでコマンドライン引数を指定して、作業ディレクトリも暫定でセットして、これでデバッガからもtest.1が読めるようにした。
リリースビルドも同様に。
これはいいとして、メインはワイド文字対応。
LexicalAnalyzer.cppで、
コマンドプロンプトはワイド文字が苦手なので、ソースのコメントなどにワイド文字があっても大丈夫なように、そもそもソースそのものは出力しない。
読み込まれるテキストはCTextFileクラスによって、UTF16のワイド文字に変換されている。
その上で、0xffを超えれば、その文字はワイド文字。
トークンが空なら、ワイド文字から始まるトークンなので、先頭に"<WCS>"と付ける。
今回はそうでない場合でも、例えば、"aあ”のようにアルファベットから始まって、ワイド文字に来た場合は、先頭を見て、そうであれば、先頭に"<WCS>"を付ける。
そして、この2つのパターンの場合、トークンを連結する。
"aあaあ"の場合、2つ目の"あ"の時、トークンは空ではないし、先頭は"<WCS>"の"<"になっているはずなので、二重に"<WCS>"を付けてしまうことはない。
m_vectstrTokenListの中からfindで、"<WCS>"があるかを探し、あった場合は、"<WCS>"とだけ出力して、内容は出力しない。
それ以外は出力する。
これでコンソール出力が途中で切れたりしない。
今回から、しばらくは、C言語の"Hello, world!"をいかにOneLang風に削っていくかを試していくので、test.1は、
C言語の"Hello, world!"プログラムにした。
("/* aあaあ */"という一応先程のケースのテストコメントも入れている。)
実行すると、
argv[1] = test.1 CLexicalAnalyzer::Analyze! ----- start ----- ----- end ----- / * <Space> <WCS> <Space> * / <CR> <LF> # include <Space> < stdio . h > <Space> / * <Space> <WCS> <Space> * / <CR> <LF> / * <Space> <WCS> <Space> * / <CR> <LF> / * <Space> <WCS> <Space> * / <CR> <LF> int <Space> main ( void ) { <Space> / * <Space> <WCS> . <Space> * / <CR> <LF> <CR> <LF> <Space> <Space> / * <Space> <WCS> <Space> * / <CR> <LF> <Space> <Space> printf ( " Hello , <Space> world ! \ n " ) ; <Space> / * <Space> <WCS> " Hello , <Space> world ! " <WCS> . <Space> * / <CR> <LF> <CR> <LF> <Space> <Space> / * <Space> <WCS> <Space> * / <CR> <LF> <Space> <Space> return <Space> 0 ; <Space> / * <Space> <WCS> 0 <WCS> . <Space> * / <CR> <LF> <CR> <LF> } 続行するには何かキーを押してください . . .
このように、本来、ワイド文字が出力される部分には、"<WCS>"が出力されている。