词法分析器设计实验报告 联系客服

发布时间 : 星期五 文章词法分析器设计实验报告更新完毕开始阅读

}

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