コメントも書けるようにする
ここまでの入力文字列中に改行を使うことはできましたが、コメントを書くことはできませんでした
そこで入力文字列中に C/C++ 風のコメントがあったときはその部分を無視することができるようにしてみましょう
仕組み
コメントは式の評価には関係ないので構文解析器の立場からすると空白と同じです
空白を読み飛ばす関数は skipspace ですから、これをコメント対応に改造してみましょう
それだけで全体がコメント対応になります
簡単ですね
では実装してみましょう
実装
bool string_calc::skipspace(){ char comment = 0; while( !eof()){ char c1 = at( 0, SEEK_CUR ); char c2 = at( 1, SEEK_CUR ); char c = 0; if( comment == '/' ){ c = getch(); if( c == '\n' ){ comment = 0; } else if( _ismbblead(( unsigned int )( unsigned char )c )){ c = getch(); } } else if( comment == '*' ){ if(( c1 == '*' )&&( c2 == '/' )){ seek( 2, SEEK_CUR ); comment = 0; } else{ c = getch(); if( _ismbblead(( unsigned int )( unsigned char )c )){ c = getch(); } } } else{ if((( c1 == '/' )&&( c2 == '/' )) ||(( c1 == '/' )&&( c2 == '*' ))){ seek( 2, SEEK_CUR ); comment = c2; } else{ c = getch(); if( _ismbblead(( unsigned int )( unsigned char )c ) || !isspace(( unsigned char )c )){ ungetch( c ); break; } } } } return !eof(); }