2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  2011~2012學年第一學期</p><p> 課程名稱:編譯原理</p><p> 課程設計題目:語法分析器</p><p> 姓 名:</p><p> 系:計算機</p><p> 專

2、 業(yè):計算機科學與技術</p><p> 年 級:2009計科</p><p> 學 號:</p><p> 指導教師:</p><p> 職 稱:副教授</p><p>  目 錄</p><p>  1 正則表達式1</p><p&g

3、t;  1.1 正則表達式1</p><p>  1.2 確定化(化簡)后的狀態(tài)轉換圖1</p><p>  1.3 分析程序代碼1</p><p>  1.4 程序運行截圖1</p><p><b>  1.5 小結1</b></p><p>  2 LL(1)分析2<

4、;/p><p>  2.1 LL(1)文法2</p><p>  2.2 LL(1)預測分析表2</p><p>  2.3 分析程序代碼2</p><p>  2.4 程序運行截圖2</p><p><b>  2.5 小結2</b></p><p>  

5、3 算符優(yōu)先分析3</p><p>  3.1 算符優(yōu)先文法3</p><p>  3.2 算符優(yōu)先關系表3</p><p>  3.3 分析程序代碼3</p><p>  3.4 程序運行截圖3</p><p><b>  3.5 小結3</b></p>&

6、lt;p><b>  4 LR分析4</b></p><p>  4.1 LR文法4</p><p>  4.2 LR分析表4</p><p>  4.3 分析程序代碼4</p><p>  4.4 程序運行截圖4</p><p><b>  4.5 小結4

7、</b></p><p><b>  參考文獻:4</b></p><p><b>  1 正則表達式</b></p><p>  1.1 正則表達式</p><p>  (a|b)*(aa|bb)(a|b)* (注:該正規(guī)式為示例,可更改)</p><p&g

8、t;  1.2 確定化(化簡)后的狀態(tài)轉換圖</p><p>  1.3 分析程序代碼</p><p>  #include <iostream></p><p>  #include <string></p><p>  #include <map></p><p>  usi

9、ng namespace std;</p><p>  //定義一個存儲狀態(tài)轉換的類</p><p>  class Statu</p><p><b>  {</b></p><p><b>  public:</b></p><p>  map<char, Stat

10、u *> MAP;</p><p><b>  };</b></p><p>  int main()</p><p><b>  {</b></p><p>  //定義4個狀態(tài)并初始化各個狀態(tài)間的關系,以及定義一個存儲當前狀態(tài)的變量status</p><p>  

11、Statu A, B, C, D, *status;</p><p>  A.MAP['a'] = &B;</p><p>  A.MAP['b'] = &C;</p><p>  B.MAP['a'] = &D;</p><p>  B.MAP['b']

12、 = &C;</p><p>  C.MAP['a'] = &B;</p><p>  C.MAP['b'] = &D;</p><p>  D.MAP['a'] = &D;</p><p>  D.MAP['b'] = &D;</p

13、><p><b>  while(1)</b></p><p><b>  {</b></p><p>  string::size_type size=0;</p><p>  string str;</p><p>  bool flag = true;</p>

14、<p>  cout<<"請輸入符合(a|b)*(aa|bb)(a|b)* 的正則表達式"<<endl;</p><p>  cin >> str;</p><p>  status = &A;//剛開始指向初始狀態(tài)</p><p>  const char *ch = str.c_str(

15、);</p><p>  while(ch[size])</p><p><b>  {</b></p><p>  if(ch[size] != 'a' && ch[size] != 'b')</p><p><b>  {</b></p>

16、;<p>  flag = false;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  status = status->MAP[ch[size++]];//根據(jù)輸入字符串調(diào)整狀態(tài)</p><p><b>

17、  }</b></p><p>  if(status == &D && flag)//若為終結狀態(tài)則符合此正則表達式</p><p>  cout<<"√正確"<<endl;</p><p><b>  else</b></p><p> 

18、 cout<<"×錯誤"<<endl;</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  1.4 程序運行截圖<

19、;/p><p><b>  1.5 小結</b></p><p>  通過定義各個狀態(tài),并生成各個狀態(tài)間的關系可以方便地表示狀態(tài)轉換圖,使用關聯(lián)容器則可以方便的管理狀態(tài)。</p><p>  2 LL(1)分析</p><p>  2.1 LL(1)文法</p><p>  E→TE'

20、 (注:該文法為示例,可更改)</p><p><b>  E'→+TE'|ε</b></p><p><b>  T→FT'</b></p><p><b>  T'→*FT'|ε</b></p><p><b>  F→

21、(E)|i</b></p><p>  2.2 LL(1)預測分析表</p><p>  2.3 分析程序代碼</p><p>  #include <iostream></p><p>  #include <string></p><p>  #include <map

22、></p><p>  #include <stack></p><p>  using namespace std;</p><p>  enum Symbols</p><p><b>  {</b></p><p>  // 終結符號 Terminal symbols:TS

23、</p><p>  TS_I, // i</p><p>  TS_PLUS, // +</p><p>  TS_MULTIPLY,// *</p><p>  TS_L_PARENS, // (</p><p>  TS_R_PARENS, // )</p&g

24、t;<p>  TS_EOS, // #, '\0'</p><p>  TS_INVALID, // 非法字符</p><p>  //非終結符號 None terminal symbols:NTS</p><p>  NTS_E, //E</p><p>  NTS_

25、EE,//E'</p><p>  NTS_T,//T</p><p>  NTS_TT,//T'</p><p>  NTS_F//F</p><p><b>  };</b></p><p>  enum Symbols lexer(char c)<

26、;/p><p><b>  {</b></p><p><b>  switch(c)</b></p><p><b>  {</b></p><p><b>  case 'i':</b></p><p>  retu

27、rn TS_I;</p><p><b>  case '+':</b></p><p>  return TS_PLUS;</p><p><b>  case '*':</b></p><p>  return TS_MULTIPLY;</p>&l

28、t;p><b>  case '(':</b></p><p>  return TS_L_PARENS;</p><p><b>  case ')':</b></p><p>  return TS_R_PARENS;</p><p><b>  

29、case '#':</b></p><p>  return TS_EOS; // 棧底:#終結符號</p><p><b>  default:</b></p><p>  return TS_INVALID;</p><p><b>  }</b></p>

30、<p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p&

31、gt;  cout << "輸入一個以#結束的字符串" << endl;</p><p>  const char *p;</p><p>  string str;</p><p>  cin >> str;</p><p>  p = str.c_str();</p>

32、<p>  map< enum Symbols, map<enum Symbols, int> > table; </p><p>  stack<enum Symbols> ss;</p><p><b>  //設置詞法分析表</b></p><p>  table[NTS_E][TS_

33、I] = 1;</p><p>  table[NTS_E][TS_L_PARENS] = 1;</p><p>  table[NTS_EE][TS_PLUS] = 2;</p><p>  table[NTS_EE][TS_R_PARENS] = 3;</p><p>  table[NTS_EE][TS_EOS] = 3;</p&

34、gt;<p>  table[NTS_T][TS_I] = 4;</p><p>  table[NTS_T][TS_L_PARENS] = 4;</p><p>  table[NTS_TT][TS_PLUS] = 6;</p><p>  table[NTS_TT][TS_MULTIPLY] = 5;</p><p>  t

35、able[NTS_TT][TS_R_PARENS] = 6;</p><p>  table[NTS_TT][TS_EOS] = 6;</p><p>  table[NTS_F][TS_I] = 8;</p><p>  table[NTS_F][TS_L_PARENS] = 7;</p><p><b>  //初始化符號棧&l

36、t;/b></p><p>  ss.push(TS_EOS);</p><p>  ss.push(NTS_E);</p><p>  while(ss.size() > 0)</p><p><b>  {</b></p><p>  if(lexer(*p) == ss.top(

37、))</p><p><b>  {</b></p><p><b>  p++;</b></p><p><b>  ss.pop();</b></p><p><b>  }</b></p><p><b>  els

38、e</b></p><p><b>  {</b></p><p>  switch(table[ss.top()][lexer(*p)])</p><p><b>  {</b></p><p>  case 1://1.E→TE'</p><p>&l

39、t;b>  ss.pop();</b></p><p>  ss.push(NTS_EE);</p><p>  ss.push(NTS_T);</p><p><b>  break;</b></p><p>  case 2://2.E'→+TE'</p><p&

40、gt;<b>  ss.pop();</b></p><p>  ss.push(NTS_EE);</p><p>  ss.push(NTS_T);</p><p>  ss.push(TS_PLUS);</p><p><b>  break;</b></p><p> 

41、 case 3://2.E'→ε</p><p><b>  ss.pop();</b></p><p><b>  break;</b></p><p>  case 4://4.T→FT'</p><p><b>  ss.pop();</b></p&

42、gt;<p>  ss.push(NTS_TT);</p><p>  ss.push(NTS_F);</p><p><b>  break;</b></p><p>  case 5://5.T'→*FT'</p><p><b>  ss.pop();</b>&l

43、t;/p><p>  ss.push(NTS_TT);</p><p>  ss.push(NTS_F);</p><p>  ss.push(TS_MULTIPLY);</p><p><b>  break;</b></p><p>  case 6://6.T'→ε</p>

44、<p><b>  ss.pop();</b></p><p><b>  break;</b></p><p>  case 7://7.F→(E)</p><p><b>  ss.pop();</b></p><p>  ss.push(TS_R_PARENS

45、);</p><p>  ss.push(NTS_E);</p><p>  ss.push(TS_L_PARENS);</p><p><b>  break;</b></p><p>  case 8://7.F→i</p><p><b>  ss.pop();</b>

46、</p><p>  ss.push(TS_I);</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  cout << "錯誤的句子" << endl;</p><

47、p><b>  goto END;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&g

48、t;<p>  cout << "正確的句子" << endl;</p><p><b>  END:</b></p><p><b>  ;</b></p><p><b>  }</b></p><p><b&

49、gt;  return 0;</b></p><p><b>  }</b></p><p>  2.4 程序運行截圖</p><p><b>  2.5 小結</b></p><p>  在程序中要跳出多層語句只能用goto語句實現(xiàn)。</p><p>  用

50、枚舉類型表示各個終結符與非終結符,再用關聯(lián)容器生成預測分析表即可方便地實現(xiàn)此算法。</p><p><b>  3 算符優(yōu)先分析</b></p><p>  3.1 算符優(yōu)先文法</p><p>  E→T | E+T | E-T (注:該文法為示例,可更改)</p><p>  T→F | T*F | T/F&l

51、t;/p><p><b>  F→(E) | i</b></p><p>  3.2 算符優(yōu)先關系表</p><p>  3.3 分析程序代碼</p><p>  #include <iostream></p><p>  #include <string></p&g

52、t;<p>  #include <map></p><p>  #include <stack></p><p>  using namespace std;</p><p>  enum Symbols {</p><p><b>  // 終結符號</b></p>

53、<p>  TS_PLUS,// +</p><p>  TS_MINUS,// -</p><p>  TS_MULTIPLY, // *</p><p>  TS_DIVISION,// /</p><p>  TS_L_PARENS,// (</p><p>  TS_R_PAR

54、ENS, // )</p><p>  TS_I,// i</p><p>  TS_EOS,// #, '\0'</p><p>  TS_INVALID,// 非法字符</p><p><b>  };</b></p><p>  map< enum

55、Symbols, map<enum Symbols, int> > table; </p><p>  enum Symbols lexer(char c)</p><p><b>  {</b></p><p><b>  switch(c)</b></p><p><b&

56、gt;  {</b></p><p><b>  case '+':</b></p><p>  return TS_PLUS;</p><p><b>  case '-':</b></p><p>  return TS_MINUS;</p>

57、;<p><b>  case '*':</b></p><p>  return TS_MULTIPLY;</p><p><b>  case '/':</b></p><p>  return TS_DIVISION;</p><p><b&

58、gt;  case '(':</b></p><p>  return TS_L_PARENS;</p><p><b>  case ')':</b></p><p>  return TS_R_PARENS;</p><p><b>  case 'i&#

59、39;:</b></p><p>  return TS_I;</p><p><b>  case '#':</b></p><p>  return TS_EOS; // 棧底:#終結符號</p><p><b>  default:</b></p>

60、<p>  return TS_INVALID;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //初始化算符優(yōu)先關系表,0、1、2分別表示=、〈、〉,-1表示不存在</p><p>  void setup()</p>

61、<p><b>  {</b></p><p>  table[TS_PLUS][TS_PLUS] = 2;</p><p>  table[TS_PLUS][TS_MINUS] = 2;</p><p>  table[TS_PLUS][TS_MULTIPLY] = 1;</p><p>  table[T

62、S_PLUS][TS_DIVISION] = 1;</p><p>  table[TS_PLUS][TS_L_PARENS] = 1;</p><p>  table[TS_PLUS][TS_R_PARENS] = 2;</p><p>  table[TS_PLUS][TS_I] = 1;</p><p>  table[TS_PLUS]

63、[TS_EOS] = 2;</p><p>  table[TS_MINUS][TS_PLUS] = 2;</p><p>  table[TS_MINUS][TS_MINUS] = 2;</p><p>  table[TS_MINUS][TS_MULTIPLY] = 1;</p><p>  table[TS_MINUS][TS_DIVI

64、SION] = 1;</p><p>  table[TS_MINUS][TS_L_PARENS] = 1;</p><p>  table[TS_MINUS][TS_R_PARENS] = 2;</p><p>  table[TS_MINUS][TS_I] = 1;</p><p>  table[TS_MINUS][TS_EOS] =

65、2;</p><p>  table[TS_MULTIPLY][TS_PLUS] = 2;</p><p>  table[TS_MULTIPLY][TS_MINUS] = 2;</p><p>  table[TS_MULTIPLY][TS_MULTIPLY] = 2;</p><p>  table[TS_MULTIPLY][TS_DIV

66、ISION] = 2;</p><p>  table[TS_MULTIPLY][TS_L_PARENS] = 1;</p><p>  table[TS_MULTIPLY][TS_R_PARENS] = 2;</p><p>  table[TS_MULTIPLY][TS_I] = 1;</p><p>  table[TS_MULTIPL

67、Y][TS_EOS] = 2;</p><p>  table[TS_DIVISION][TS_PLUS] = 2;</p><p>  table[TS_DIVISION][TS_MINUS] = 2;</p><p>  table[TS_DIVISION][TS_MULTIPLY] = 2;</p><p>  table[TS_DIV

68、ISION][TS_DIVISION] = 2;</p><p>  table[TS_DIVISION][TS_L_PARENS] = 1;</p><p>  table[TS_DIVISION][TS_R_PARENS] = 2;</p><p>  table[TS_DIVISION][TS_I] = 1;</p><p>  tab

69、le[TS_DIVISION][TS_EOS] = 2;</p><p>  table[TS_L_PARENS][TS_PLUS] = 1;</p><p>  table[TS_L_PARENS][TS_MINUS] = 1;</p><p>  table[TS_L_PARENS][TS_MULTIPLY] = 1;</p><p> 

70、 table[TS_L_PARENS][TS_DIVISION] = 1;</p><p>  table[TS_L_PARENS][TS_L_PARENS] = 1;</p><p>  table[TS_L_PARENS][TS_R_PARENS] = 0;</p><p>  table[TS_L_PARENS][TS_I] = 1;</p>&

71、lt;p>  table[TS_L_PARENS][TS_EOS] = -1;</p><p>  table[TS_R_PARENS][TS_PLUS] = 2;</p><p>  table[TS_R_PARENS][TS_MINUS] = 2;</p><p>  table[TS_R_PARENS][TS_MULTIPLY] = 2;</p&g

72、t;<p>  table[TS_R_PARENS][TS_DIVISION] = 2;</p><p>  table[TS_R_PARENS][TS_L_PARENS] = -1;</p><p>  table[TS_R_PARENS][TS_R_PARENS] = 2;</p><p>  table[TS_R_PARENS][TS_I] =

73、-1;</p><p>  table[TS_R_PARENS][TS_EOS] = 2;</p><p>  table[TS_I][TS_PLUS] = 2;</p><p>  table[TS_I][TS_MINUS] = 2;</p><p>  table[TS_I][TS_MULTIPLY] = 2;</p>&l

74、t;p>  table[TS_I][TS_DIVISION] = 2;</p><p>  table[TS_I][TS_L_PARENS] = -1;</p><p>  table[TS_I][TS_R_PARENS] = 2;</p><p>  table[TS_I][TS_I] = -1;</p><p>  table[TS

75、_I][TS_EOS] = 2;</p><p>  table[TS_EOS][TS_PLUS] = 1;</p><p>  table[TS_EOS][TS_MINUS] = 1;</p><p>  table[TS_EOS][TS_MULTIPLY] = 1;</p><p>  table[TS_EOS][TS_DIVISION]

76、 = 1;</p><p>  table[TS_EOS][TS_L_PARENS] = 1;</p><p>  table[TS_EOS][TS_R_PARENS] = -1;</p><p>  table[TS_EOS][TS_I] = 1;</p><p>  table[TS_EOS][TS_EOS] = 0;</p>

77、<p><b>  }</b></p><p>  int main()</p><p><b>  {</b></p><p>  setup();//初始化優(yōu)先關系表</p><p><b>  while(1)</b></p><p>

78、;<b>  {</b></p><p>  cout << "輸入一個以#結束的符號串" << endl;</p><p>  const char *p;</p><p>  string str;</p><p>  cin >> str;</p>

79、<p>  p = str.c_str();</p><p>  stack<enum Symbols> ss;</p><p>  ss.push(TS_EOS);</p><p><b>  while(1)</b></p><p><b>  {</b></p&

80、gt;<p>  if(lexer(*p) == TS_INVALID)//讀取到不在集合中的非法字符</p><p><b>  {</b></p><p>  cout << "×不是給定算符優(yōu)先文法的句子" << endl;</p><p><b>  brea

81、k;</b></p><p><b>  }</b></p><p>  if(ss.top() == TS_EOS && lexer(*p) == TS_EOS)//成功規(guī)約</p><p><b>  {</b></p><p>  cout << &qu

82、ot;√是給定算符優(yōu)先文法的句子" << endl;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b><

83、;/p><p>  if(table[ss.top()][lexer(*p)] == 1 || table[ss.top()][lexer(*p)] == 0)</p><p><b>  {</b></p><p>  //繼續(xù)讀入字符,暫不規(guī)約</p><p>  ss.push(lexer(*p));</p>

84、;<p><b>  ++p;</b></p><p><b>  }</b></p><p>  else if(table[ss.top()][lexer(*p)] == 2) //符合規(guī)約要求,開始規(guī)約</p><p><b>  {</b></p><p>

85、;  enum Symbols temp;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  temp = ss.top();</p><p><b>  ss.pop();</b></p><

86、p>  if(table[ss.top()][temp] == 1)</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  else//語法錯誤</p><

87、p><b>  {</b></p><p>  cout << "×不是給定算符優(yōu)先文法的句子" << endl;</p><p><b>  break;</b></p><p><b>  }</b></p><p&g

88、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><

89、p>  3.4 程序運行截圖</p><p><b>  3.5 小結</b></p><p>  此方法初始化優(yōu)先關系法顯得有點繁瑣,有待改進。</p><p><b>  4 LR分析</b></p><p><b>  4.1 LR文法</b></p&

90、gt;<p>  (0) S'→S (注:該文法為示例,可更改)</p><p><b>  (1) S→BB</b></p><p><b>  (2) B→aB</b></p><p><b>  (3) B→b</b></p><p>  4.2

91、 LR分析表</p><p>  4.3 分析程序代碼</p><p>  #include <iostream></p><p>  #include <string></p><p>  #include <map></p><p>  #include <stack&g

92、t;</p><p>  using namespace std;</p><p>  enum Symbols {</p><p><b>  // 終結符號</b></p><p>  TS_A,// A</p><p>  TS_B,// B</p><p&g

93、t;  TS_EOS,// #, '\0'</p><p>  TS_INVALID,// 非法字符</p><p><b>  //非終結符號</b></p><p>  NTS_SS,//S'</p><p>  NTS_S,//S</p><p>

94、;  NTS_B,//B</p><p>  //狀態(tài)status</p><p><b>  S_0,</b></p><p><b>  S_1,</b></p><p><b>  S_2,</b></p><p><b>  S_

95、3,</b></p><p><b>  S_4,</b></p><p><b>  S_5,</b></p><p><b>  S_6,</b></p><p><b>  S_ACC,</b></p><p>&

96、lt;b>  //GOGO</b></p><p><b>  G_S,</b></p><p><b>  G_B,</b></p><p><b>  //規(guī)約式</b></p><p><b>  R_1,</b></p>

97、;<p><b>  R_2,</b></p><p><b>  R_3,</b></p><p><b>  };</b></p><p>  enum Symbols lexer(char c)</p><p><b>  {</b>&

98、lt;/p><p><b>  switch(c)</b></p><p><b>  {</b></p><p><b>  case 'a':</b></p><p>  return TS_A;</p><p><b>  c

99、ase 'b':</b></p><p>  return TS_B;</p><p><b>  case '#':</b></p><p>  return TS_EOS; // 棧底:#終結符號</p><p><b>  default:</b>&

100、lt;/p><p>  return TS_INVALID;</p><p><b>  }</b></p><p><b>  }</b></p><p>  map< enum Symbols, map<enum Symbols, enum Symbols> > table;

101、 </p><p>  int main()</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  cout << "輸入一個以#結

102、束的字符串" << endl;</p><p>  const char *p;</p><p>  string str;</p><p>  cin >> str;</p><p>  p = str.c_str();</p><p>  stack<enum Symbols

103、> status;</p><p><b>  //設置LR分析表</b></p><p>  table[S_0][TS_A] = S_3;</p><p>  table[S_0][TS_B] = S_4;</p><p>  table[S_0][NTS_S] = S_1;</p><p&

104、gt;  table[S_0][NTS_B] = S_2;</p><p>  table[S_1][TS_EOS] = S_ACC;</p><p>  table[S_2][TS_A] = S_3;</p><p>  table[S_2][TS_B] = S_4;</p><p>  table[S_2][NTS_B] = S_5;&l

105、t;/p><p>  table[S_3][TS_A] = S_3;</p><p>  table[S_3][TS_B] = S_4;</p><p>  table[S_3][NTS_B] = S_6;</p><p>  table[S_4][TS_A] = R_3;</p><p>  table[S_4][TS_

106、B] = R_3;</p><p>  table[S_4][TS_EOS] = R_3;</p><p>  table[S_5][TS_A] = R_1;</p><p>  table[S_5][TS_B] = R_1;</p><p>  table[S_5][TS_EOS] = R_1;</p><p>  

107、table[S_6][TS_A] = R_2;</p><p>  table[S_6][TS_B] = R_2;</p><p>  table[S_6][TS_EOS] = R_2;</p><p><b>  //初始化狀態(tài)棧</b></p><p>  status.push(S_0);</p>&

108、lt;p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(lexer(*p) == TS_INVALID)</p><p><b>  {</b></p><p>  cout << "Fals

109、e" << endl;</p><p><b>  goto END;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  switch(table[status.top()][lexer(

110、*p)])</p><p><b>  {</b></p><p><b>  case S_0:</b></p><p><b>  case S_1:</b></p><p><b>  case S_2:</b></p><p&g

111、t;<b>  case S_3:</b></p><p><b>  case S_4:</b></p><p><b>  case S_5:</b></p><p><b>  case S_6:</b></p><p>  status.push(

112、table[status.top()][lexer(*p)]);</p><p><b>  ++p;</b></p><p><b>  break;</b></p><p>  case S_ACC:</p><p>  cout << "√是給定LR文法的句子"

113、 << endl;</p><p><b>  goto END;</b></p><p><b>  break;</b></p><p><b>  case R_1:</b></p><p>  status.pop();</p><p&g

114、t;  status.pop();</p><p>  status.push(table[status.top()][NTS_S]);</p><p><b>  break;</b></p><p><b>  case R_2:</b></p><p>  status.pop();</

115、p><p>  status.pop();</p><p>  status.push(table[status.top()][NTS_B]);</p><p><b>  break;</b></p><p><b>  case R_3:</b></p><p>  stat

116、us.pop();</p><p>  status.push(table[status.top()][NTS_B]);</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  cout << "×不

117、是給定LR文法的句子" << endl;</p><p><b>  goto END;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b><

118、/p><p><b>  END:</b></p><p><b>  ;</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b&g

119、t;</p><p>  4.4 程序運行截圖</p><p><b>  4.5 小結</b></p><p>  此LR分析程序的設計的數(shù)據(jù)結構與前面的類似,主要在識別算法上修改便可達到預期目的。</p><p><b>  參考文獻:</b></p><p>  [

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論