当前位置:首页 > 词法分析器设计实验报告
}
index++; } }
return productions; }
//获取单一字符串
private String getSingleString(String s) {
String str = \
for (int i = 0; i < s.Length; i++) {
if (!str.Contains(s[i])) str = str + s[i]; }
return str; }
private FIRST getFirst(Char c){ FIRST First = new FIRST(); First.noter = c;
for (int i = 0; i < 20; i++) {
if (production[i].noter == c) {
if (terminator.Contains(production[i].production[0])) {
First.first = First.first + production[i].production[0]; if (production[i].production[0] == '@') {
flag = 1; } }
else if (nonterminal.Contains(production[i].production[0])) {
First.first = First.first + getFirst(production[i].production[0]).first; if(flag==1){ flag = 0; First.first = First.first + getFirst(production[i].production[1]).first; }
} } }
First.first = getSingleString(First.first); return First; }
private int getIndexOfString(String s,Char c) { for (int i = 0; i < s.Length; i++) {
if (s[i] == c) return i; }
return 0; }
private FOLLOW getFollow(Char c) {
FOLLOW Follow = new FOLLOW(); Follow.noter = c;
if (nonterminal[0] == c)
Follow.follow = Follow.follow + '#'; for (int i = 0; i < 20; i++) {
if (production[i].production != null) { if (production[i].production.Contains(c)) {
int index = getIndexOfString(production[i].production,c); if ((index+1) if (terminator.Contains(production[i].production[index + 1])) Follow.follow = Follow.follow + production[i].production[index + 1].ToString().Replace(\ else if (nonterminal.Contains(production[i].production[index + 1])) { if (getFirst(production[i].production[index + 1]).first.Contains('@') && production[i].noter!=c) Follow.follow = Follow.follow + getFollow(production[i].noter).follow; ; Follow.follow = Follow.follow + getFirst(production[i].production[index + 1]).first.Replace(\ } } else { if (production[i].noter!=c) Follow.follow = Follow.follow + getFollow(production[i].noter).follow; } } } } Follow.follow = getSingleString(Follow.follow); return Follow; } private String getStringFirst(String s) { String str = \ if (s==null||s.Length<1) ; else if (terminator.Contains(s[0])) str = str + s[0]; else if (nonterminal.Contains(s[0])) { if (getFirst(s[0]).first.Contains('@')) { str = str + getFirst(s[0]).first.Replace(\getStringFirst(s.Replace(s[0].ToString(), \ } else str = str + getFirst(s[0]).first; } return str; } private String [,]getAnalysis_Sheet(FIRST []First, FOLLOW []Follow){ String [,]sheet=new String[20,20]; for (int i = 0; i < nonterminal.Length; i++) for (int j = 0; j < Terminator.Length; j++) { if (First[i].first.Contains(Terminator[j])) { for (int m = 0; m < production.Length; m++) { if (production[m].noter != nonterminal[i]) ; else if (getStringFirst(production[m].production) == null) ; else (getStringFirst(production[m].production).Contains(Terminator[j])) { sheet[i, j] = production[m].noter + \ + if + production[m].production; } } } if (First[i].first.Contains('@')&&Follow[i].follow.Contains(Terminator[j])) { sheet[i, j] = nonterminal[i] + \ } } return sheet; } private void addData(String[,] sheet) { try { for (int i = 0; i < Terminator.Length; i++) { DataGridViewTextBoxColumn dgc = DataGridViewTextBoxColumn(); dgc.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dgc.HeaderText=Terminator[i]+\ dataGridView2.Columns.Add(dgc); } for (int i = 0; i < nonterminal.Length; i++) { DataGridViewRow dgr = new DataGridViewRow(); for (int j = 0; j < Terminator.Length+1; j++) { if (j == 0) { DataGridViewTextBoxCell dgt = DataGridViewTextBoxCell(); dgt.Value = nonterminal[i]; dgr.Cells.Add(dgt); } else { DataGridViewTextBoxCell dgt = DataGridViewTextBoxCell(); dgt.Value = sheet[i,j-1]; dgr.Cells.Add(dgt); } } new new new
共分享92篇相关文档