double statement() // Divides definition of variable and expressions { Token t = ts.get(); switch(t.kind) { case let: // User wants to declare the variable return names.define_name(let); case constant: return names.define_name(constant); default: // User wants another operation ts.unget(t); return expression(); } }
// "let"が検出されている前提とする // name = expression を処理する // "name"という名前の変数を初期値"expression"で宣言する double declaration(){ Token t = ts.get(); bool constflag = t.kind == constt ? true : false; t = ts.get(); if(t.kind != name) error("name expected in declaration"); string var_name = t.name; Token t2 = ts.get(); if(t2.kind != '=') error("= missing in declaration of ", var_name); double d = expression(); st.define_name(var_name, d, constflag); return d; }