Skip to content

Commit 2082603

Browse files
committed
fill genCode() method [12]
1 parent 46534e4 commit 2082603

File tree

3 files changed

+23
-20
lines changed

3 files changed

+23
-20
lines changed

src/CodeGenerator/DefinedFunction.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class DefinedFunction {
3131
"getHour", "getMin", "getSec", "getYear", "getMonth", "getDay",
3232
"addTime", "subTime", "mulTime", "divTime", "modTime",
3333
"addDate", "subDate",
34-
"validTime"
34+
"validTime", "daysToDate"
3535
};
3636

3737
public static final HashSet<String> predefinedFunc = new HashSet<>(Arrays.asList(customFunc));
@@ -65,6 +65,7 @@ public static void defineFunc(FunctionSet functionSet, HashMap<String, ArrayList
6565

6666
createFunc(Type.DATE, "addDate", dateParam, dateParam);
6767
createFunc(Type.DATE, "subDate", dateParam, dateParam);
68+
createFunc(Type.DATE, "daysToDate", intParam);
6869
}
6970

7071
private static void createFunc(Type type, String name, ParamDeclaration... params) {
@@ -258,14 +259,13 @@ protected static void addDate() {
258259
CodeGenerator.genCode("lod", 2, 2);
259260
CodeGenerator.genCode("add");
260261

261-
CodeGenerator.call("validDate");
262-
262+
CodeGenerator.genCode("retv");
263263
CodeGenerator.genCode("end");
264264
}
265265

266266
protected static void subDate() {
267267
// todo
268-
CodeGenerator.genFunc("addDate", 2, 2, 2);
268+
CodeGenerator.genFunc("subDate", 2, 2, 2);
269269
CodeGenerator.genCode("sym", 2, 1, 1);
270270
CodeGenerator.genCode("sym", 2, 2, 1);
271271

@@ -277,6 +277,17 @@ protected static void subDate() {
277277
CodeGenerator.genCode("end");
278278
}
279279

280+
protected static void daysToDate() {
281+
// todo 확인
282+
CodeGenerator.genFunc("daysToDate", 1, 2, 2);
283+
CodeGenerator.genCode("sym", 2, 1, 1);
284+
285+
CodeGenerator.genCode("lod", 2, 1);
286+
287+
CodeGenerator.genCode("retv");
288+
CodeGenerator.genCode("end");
289+
}
290+
280291
protected static void run(String name) {
281292
try {
282293
DefinedFunction.class.getDeclaredMethod(name).invoke(null);

src/Syntax/DateValue.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class DateValue extends Value {
1919
*/
2020
protected final int year, month, day;
2121

22-
protected final static long base = new GregorianCalendar(0, 0, 0).getTimeInMillis() * -1;
22+
protected final static long base = new GregorianCalendar(1, 0, 3).getTimeInMillis() * -1;
2323

2424
protected Calendar calendar;
2525

@@ -61,15 +61,18 @@ protected void V(HashMap<String, Init> declarationMap) {
6161
if (valid) return;
6262

6363
check(year >= 0, "year can not be negative value");
64-
check(month >= 1 && month <= 12, "month value must be between 1 and 12");
65-
check(month >= 1 && month <= 31, "day value must be between 1 and 31");
64+
check(month >= 0, "month can not be negative value");
65+
check(day >=0, "day can not be negative value");
6666

6767
calendar = new GregorianCalendar(year, month - 1, day);
6868

6969
int rightYear = calendar.get(Calendar.YEAR);
7070
int rightMonth = calendar.get(Calendar.MONTH);
7171
int rightDay = calendar.get(Calendar.DATE);
7272

73+
System.out.println(year + " " + month + " " + day);
74+
System.out.println(calendar.getTime());
75+
7376
check(rightYear == year && rightMonth + 1 == month && rightDay == day,
7477
"wrong date type declaration. should be : " + rightYear + "/" + rightMonth + "/" + rightDay);
7578

src/Syntax/Unary.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -193,17 +193,13 @@ public void genCode() {
193193
if (term instanceof Variable) {
194194
Variable temp = (Variable) term;
195195

196-
CodeGenerator.ldp();
197-
198196
CodeGenerator.lod(temp.name);
199197
if (op.value.equals(Operator.DATE_PP)) {
200198
CodeGenerator.inc();
201199
} else {
202200
CodeGenerator.dec();
203201
}
204202

205-
CodeGenerator.call("validDate");
206-
207203
CodeGenerator.str(temp.name);
208204

209205
} else if (term instanceof ArrayRef) {
@@ -213,22 +209,15 @@ public void genCode() {
213209
temp.index.genCode();
214210
CodeGenerator.add();
215211

216-
217-
CodeGenerator.ldp();
218-
219-
CodeGenerator.lda(temp.name);
220-
temp.index.genCode();
221-
CodeGenerator.add();
222-
212+
CodeGenerator.dup();
223213
CodeGenerator.ldi();
214+
224215
if (op.value.equals(Operator.DATE_PP)) {
225216
CodeGenerator.inc();
226217
} else {
227218
CodeGenerator.dec();
228219
}
229220

230-
CodeGenerator.call("validDate");
231-
232221

233222
CodeGenerator.sti();
234223
}

0 commit comments

Comments
 (0)