void DP()
{
string word = null;
if (cur_token != '.')
{
run_to_data_content = true;//如果是标签,表明到达了数据区
word = get_word();
if (char.IsDigit(word[0]))
{
error("标签只能以$或_或字母开头");
}
#if debug
Debug("got label :" + word);
#endif
skip_space();
if (cur_token != ':')
{
error("语法错误,期望分号(:)");
}
string upper_word = word.ToUpper();
if (extern_symbol_tmp.ContainsKey(upper_word))
error(string.Format("符号{0}已被声明为Extern,不能被定义", word));
if (dataTable.Contains(upper_word))
error(string.Format("符号{0}出现重定义", word));
dataTable.Add(upper_word);
format_line.Append(AppendSpace(upper_word + " :"));
if (global_symbol_tmp.ContainsKey(upper_word))
{
global_symbol_tmp.Remove(upper_word);
}
get_src_token();
skip_space();
if (cur_token != '.')
error("语法错误,期望点号(.)");
}
else
{
format_line.Append(AppendSpace());
}
get_src_token();
word = get_word();
format_line.Append(AppendSpace('.'+word.ToUpper(),SPACENUM2 ));
skip_space();
switch (word.ToLower())
{
case "global":
PGlobal();
break;
case "extern":
PExtern();
break;
case "word":
PWord();
break;
case "byte":
PByte();
break;
case "space":
PSpace();
break;
case "align":
PAlign();
break;
case "ascii":
PAscii();
break;
case "asciiz":
PAsciiz();
break;
case "text":
PText();
break;
default:
error("不支持的伪指令:" + word);
break;
}
}