编译器进行语法分析
首先编译器进行语法分析,也就是要把那些字符串分离出来。
然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。
最后生成的是目标文件,也称为obj文件。
再经过链接器的链接就可以生成最后的EXE文件了。
有些时候需要把多个文件产生的目标文件进行链接,产生最后的代码。这一过程称为交叉链接。
1 package Com.Table; 2 import java.util.Scanner; 3 public class EightTable { 4 static String CaculateWeekDay(int y,int m,int d) 5 { 6 if(m==1) 7 { 8 m = 13; 9 y--; 10 } 11 if(m==2) 12 { 13 m=14; 14 y--; 15 } 16 int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 17 String weeks = null; 18 switch(week) 19 { 20 case 0: weeks="Monday"; break; 21 case 1: weeks="Tuesday"; break; 22 case 2: weeks="Wednesday"; break; 23 case 3: weeks="Thursday"; break; 24 case 4: weeks="Friday"; break; 25 case 5: weeks="Saturday "; break; 26 case 6: weeks="Sunday"; break; 27 } 28 return weeks; 29 } 30 31 public static void main(String [] args) 32 { 33 int [][] day = new int[5][7]; 34 System.out.print("input year:"); 35 Scanner scanner = new Scanner(System.in); 36 int Year = scanner.nextInt(); 37 System.out.print("input mounths:"); 38 int Mounth = scanner.nextInt(); 39 40 System.out.println("Sunday \t Monday \t Tuesday \t Wednesday \t Thursday \t Friday \t Saturday"); 41 int flag = 0; 42 String Week = CaculateWeekDay(Year, Mounth, 1); 43 if (Week.equals("Monday")) 44 { 45 day[0][1] = 1; 46 } 47 if (Week.equals("Tuesday")) 48 { 49 day[0][2] = 1; 50 } 51 if (Week.equals("Wednesday")) 52 { 53 day[0][3] = 1; 54 } 55 if (Week.equals("Thursday")) 56 { 57 day[0][4] = 1; 58 } 59 if (Week.equals("Friday")) 60 { 61 day[0][5] = 1; 62 } 63 if (Week.equals("Saturday")) 64 { 65 day[0][6] = 1; 66 flag = 1; 67 } 68 if (Week.equals("Sunday")) 69 { 70 day[0][0] = 1; 71 } 72 73 if (Mounth == 1 || 74 Mounth == 3 || 75 Mounth == 5 || 76 Mounth == 7 || 77 Mounth == 8 || 78 Mounth == 10 || 79 Mounth == 12) 80 { 81 for (int i = 0; i < 5; i++) 82 { 83 for (int j = 0; j < 7; j++) 84 { 85 if (day[i][j] == 1) 86 { 87 for (int m = 0; m < 31; m++) 88 { 89 System.out.print(day[i][j] + m + "\t\t"); 90 if ((j + m + 1) % 7 == 0) 91 { 92 System.out.println(); 93 } 94 } 95 } 96 else 97 { 98 System.out.print("\t\t"); 99 } 100 } 101 102 } 103 } 104 else if (Mounth == 4 || 105 Mounth == 6 || 106 Mounth == 9 || 107 Mounth == 11) 108 { 109 for (int i = 0; i < 5; i++) 110 { 111 for (int j = 0; j < 7; j++) 112 { 113 if (day[i][j] == 1) 114 { 115 for (int m = 0; m < 30; m++) 116 { 117 System.out.print(day[i][j] + m + "\t\t"); 118 if ((j + m + 1) % 7 == 0) 119 { 120 System.out.println(); 121 } 122 } 123 } 124 else 125 { 126 System.out.print("\t\t"); 127 } 128 } 129 130 } 131 } 132 else 133 { 134 if ((Year % 4 == 0 || Year % 400 == 0) && Year % 100 != 0) 135 { 136 for (int i = 0; i < 5; i++) 137 { 138 for (int j = 0; j < 7; j++) 139 { 140 if (day[i][j] == 1) 141 { 142 for (int m = 0; m < 29; m++) 143 { 144 System.out.print(day[i][j] + m + "\t\t"); 145 if ((j + m + 1) % 7 == 0) 146 { 147 System.out.println(); 148 } 149 } 150 } 151 else 152 { 153 System.out.print("\t\t"); 154 } 155 } 156 } 157 } 158 else 159 { 160 for (int i = 0; i < 5; i++) 161 { 162 for (int j = 0; j < 7; j++) 163 { 164 if (day[i][j] == 1) 165 { 166 for (int m = 0; m < 28; m++) 167 { 168 System.out.print(day[i][j] + m + "\t\t"); 169 if ((j + m + 1) % 7 == 0) 170 { 171 System.out.println(); 172 } 173 } 174 } 175 else 176 { 177 System.out.print("\t\t"); 178 } 179 } 180 181 } 182 } 183 } 184 } 185 }