こんにちは、いつもお世話になっております。
rubyでC言語の字句解析プログラムを簡単に作成しようと考えていまして、以下のようなコードを書きました。
また先にやりたいことを説明させていただきますと、lineの先頭に、文字列の配列reserved_wordsの中にある予約語に当てはまるものがあったら、"reserved words(一致した予約語)"として出力するという処理を考えています。
ruby
1reserved_words=%w[auto break case char const continue default do double else enum exte\ 2rn float for goto if int long register return short signed sizeof static struct switch\ 3 typedef union unsigned void volatile while] 4 5print "input a line: " 6while (line=gets)!=nil do 7 until line.empty? do 8 case line 9 #予約語がlineの先頭にあるか判別したい 10 when /\A#{reserved_words}/ 11 puts "reserved words" 12 when /\A\s+/ 13 puts "space (skip)" 14 when /\A(\S+)/ 15 puts "word (#{$1})" 16 end 17 line = $' 18 end 19end
しかし、このコードだと、例えば標準入力から"return"と入力したとすると、'r'、'e'、't'、'u'、'r'、'n'の文字それぞれが評価され、"reserved words"が六個出力されてしまいます。
他の方法としては正規表現を用いず、
①
case *reserved words
とするか、
②
case auto
case break
などと個別に指定する方法などがあると思いますが、①の方法では、やりたいことができず、②の方法では、やりたいこともでき、簡単に書くこともできますが、予約語が多くなった場合書くのが大変ですし、コードが長くなってしまいます。
どうにかwhenのあとの正規表現の中で配列を用いて、かつその一致した予約語を得る方法は無いでしょうか?
もし、案等ありましたら、教えていただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/28 07:24
2019/05/28 09:02
2019/05/28 09:06
2019/05/28 09:40