diff --git a/Examples/for.mc b/Examples/for.mc new file mode 100644 index 0000000..265016f --- /dev/null +++ b/Examples/for.mc @@ -0,0 +1,13 @@ +void main() +{ + int x; + + for( int i=0; i<=10; i++) + { + x = 333; + x++; + write(x); + x %= 10; + write(x); + } +} \ No newline at end of file diff --git a/MiniCScanner/MiniCScanner.vcxproj.filters b/MiniCScanner/MiniCScanner.vcxproj.filters index cca10a4..aaacf7c 100644 --- a/MiniCScanner/MiniCScanner.vcxproj.filters +++ b/MiniCScanner/MiniCScanner.vcxproj.filters @@ -24,7 +24,7 @@ - 소스 파일 + 헤더 파일 \ No newline at end of file diff --git a/MiniCScanner/MiniCScanner.vcxproj.user b/MiniCScanner/MiniCScanner.vcxproj.user index e0ef295..dca5cda 100644 --- a/MiniCScanner/MiniCScanner.vcxproj.user +++ b/MiniCScanner/MiniCScanner.vcxproj.user @@ -10,4 +10,8 @@ $(ProjectDir)..\Examples\ WindowsLocalDebugger + + for.mc + WindowsLocalDebugger + \ No newline at end of file diff --git a/MiniCScanner/MiniCScannerTester.c b/MiniCScanner/MiniCScannerTester.c index f3a986d..9524f62 100644 --- a/MiniCScanner/MiniCScannerTester.c +++ b/MiniCScanner/MiniCScannerTester.c @@ -14,28 +14,48 @@ FILE* outputFile; // output file extern char* tokenName[]; void icgError(int n); +void startScanner(char* fn); int main(int argc, char *argv[]) { - - char fileName[30] = "", buffer[30] = ""; - struct tokenType token; - int errorNo = 0; - char *fileNamePtr = NULL, *context = NULL; - printf(" *** start of Mini C Compiler\n"); - if (argc != 2) { + if (argc < 2) { icgError(1); exit(1); } - strncpy_s(fileName, sizeof(fileName), argv[1], sizeof(fileName)-1); + for (int i = 1;i < argc;i++) + { + startScanner(argv[i]); + + } + return 0; +} + +void icgError(int n) +{ + printf("icg_error: %d\n", n); + //3:printf("A Mini C Source file must be specified.!!!\n"); + //"error in DCL_SPEC" + //"error in DCL_ITEM" +} + +void startScanner(char* fn) +{ + char fileName[30] = ""; + char buffer[30] = ""; + struct tokenType token; + int errorNo = 0; + char* fileNamePtr = NULL, * context = NULL; + + strncpy_s(fileName, sizeof(fileName), fn, sizeof(fileName) - 1); + printf("fileName : %s\n", fileName); printf(" * source file name: %30s\n", fileName); if (fopen_s(&sourceFile, fileName, "r") != 0) { - icgError(2); + icgError(2); exit(1); } - + strncpy_s(buffer, sizeof(buffer), fileName, sizeof(fileName) - 1); fileNamePtr = strtok_s(buffer, ".", &context); strcat_s(buffer, sizeof(buffer), ".out"); @@ -48,51 +68,39 @@ int main(int argc, char *argv[]) exit(1); } - // Test code for scanner printf(" === start of Scanner\n"); - + do { token = scanner(sourceFile); - // write on console - /* + if (token.number == tident) { printf("Token %10s ( %3d, %12s )\n", tokenName[token.number], token.number, token.value.id); } else if (token.number == tnumber) { printf("Token %10s ( %3d, %12d )\n", tokenName[token.number], token.number, token.value.num); } + else if (token.number == trealnumber) { + printf("Token %10s ( %3d, %12.6f )\n", tokenName[token.number], token.number, token.value.real_num); + } + else if (token.number == tcharacter) { + printf("Token %10s ( %3d, %c )\n", tokenName[token.number], token.number, token.value.character); + } + else if (token.number == tstring) { + printf("Token %10s ( %3d, %s )\n", tokenName[token.number], token.number, token.value.string); + } else { printf("Token %10s ( %3d, %12s )\n", tokenName[token.number], token.number, ""); } - */ - + + writeToken(token, outputFile); } while (token.number != teof); - - /* - printf(" === start of Parser\n"); - root = parser(); - printTree(root, 0); - printf(" === start of ICG\n"); - codeGen(root); - */ + printf(" *** end of Mini C Compiler\n"); fclose(sourceFile); fclose(outputFile); - - } - - -void icgError(int n) -{ - printf("icg_error: %d\n", n); - //3:printf("A Mini C Source file must be specified.!!!\n"); - //"error in DCL_SPEC" - //"error in DCL_ITEM" -} - diff --git a/MiniCScanner/Scanner.c b/MiniCScanner/Scanner.c index 4189ecf..c3e3b96 100644 --- a/MiniCScanner/Scanner.c +++ b/MiniCScanner/Scanner.c @@ -3,22 +3,24 @@ * 2020. 5. 11 * ***************************************************************/ - - #include #include #include +#include #include "Scanner.h" +/* + - 인식 키워드 추가: char, double, string,for, switch, case, default, continue, break + - 인식 리터럴 추가: 문자, 실수, 문자열 + - 자바기준 documented comment /** ~ *\/ + */ enum tsymbol tnum[NO_KEYWORD] = { - tconst, telse, tif, tint, treturn, tvoid, twhile + tconst, telse, tif, tint, treturn, tvoid, twhile, + tchar, tdouble, tfor, tswitch, tcase, tdefault, tcontinue, tbreak }; - - - char* tokenName[] = { "!", "!=", "%", "%=", "%ident", "%number", /* 0 1 2 3 4 5 */ @@ -30,15 +32,21 @@ char* tokenName[] = { /* 18 19 20 21 22 23 */ "==", ">", ">=", "[", "]", "eof", /* 24 25 26 27 28 29 */ + "%realnumber", "%character", "%string", + /* 30 31 32 실수, 문자, 문자열 literal 추가 */ // ........... word symbols ................................. // - /* 30 31 32 33 34 35 */ "const", "else", "if", "int", "return", "void", - /* 36 37 38 39 */ - "while", "{", "||", "}" + /* 33 34 35 36 37 38 */ + "while", "{", "||", "}", "char", "double", + /* 39 40 41 42 43 44 */ + "for", "switch", "case", "default", "continue", "break", + /* 45 46 47 48 49 50 */ }; char* keyword[NO_KEYWORD] = { - "const", "else", "if", "int", "return", "void", "while" + /* 정수, 실수, 문자열 등의 keyword 추가 */ + "const", "else", "if", "int", "return", "void", "while", + "char", "double", "for", "switch", "case", "default", "continue", "break" }; struct tokenType scanner(FILE *sourceFile) @@ -51,18 +59,23 @@ struct tokenType scanner(FILE *sourceFile) do { while (isspace(ch = fgetc(sourceFile))); // state 1: skip blanks + printf("%c", ch); if (superLetter(ch)) { // identifier or keyword i = 0; do { if (i < ID_LENGTH) id[i++] = ch; ch = fgetc(sourceFile); } while (superLetterOrDigit(ch)); + // identifier의 길이는 12를 넘을 수 없다 if (i >= ID_LENGTH) lexicalError(1); id[i] = '\0'; + printf("id : %s\n", id); ungetc(ch, sourceFile); // retract + // find the identifier in the keyword table for (index = 0; index < NO_KEYWORD; index++) if (!strcmp(id, keyword[index])) break; + if (index < NO_KEYWORD) // found, keyword exit token.number = tnum[index]; else { // not found, identifier exit @@ -71,123 +84,167 @@ struct tokenType scanner(FILE *sourceFile) } } // end of identifier or keyword else if (isdigit(ch)) { // number - token.number = tnumber; - token.value.num = getNumber(sourceFile, ch); - } - else switch (ch) { // special character - case '/': - ch = fgetc(sourceFile); - if (ch == '*') // text comment - do { - while (ch != '*') ch = fgetc(sourceFile); - ch = fgetc(sourceFile); - } while (ch != '/'); - else if (ch == '/') // line comment - while (fgetc(sourceFile) != '\n'); - else if (ch == '=') token.number = tdivAssign; - else { - token.number = tdiv; - ungetc(ch, sourceFile); // retract - } - break; - case '!': + /* + floating point가 있으면 실수, 없으면 정수. + 첫 문자에 판단 및 두 계산을 동시에 진행하는 것은 불가능하므로 + 정수 부분을 계산한 후, 남은 문자에 floating point가 존재하면 실수인 것으로 판단하고 추가 계산. + */ + char tmp_ch = ch; + // 임시로 정수값을 저장 + int tmp_num = getNumber(sourceFile, ch); ch = fgetc(sourceFile); - if (ch == '=') token.number = tnotequ; - else { - token.number = tnot; - ungetc(ch, sourceFile); // retract - } - break; - case '%': - ch = fgetc(sourceFile); - if (ch == '=') { - token.number = tremAssign; - } - else { - token.number = tremainder; - ungetc(ch, sourceFile); - } - break; - case '&': - ch = fgetc(sourceFile); - if (ch == '&') token.number = tand; - else { - lexicalError(2); - ungetc(ch, sourceFile); // retract - } - break; - case '*': - ch = fgetc(sourceFile); - if (ch == '=') token.number = tmulAssign; - else { - token.number = tmul; - ungetc(ch, sourceFile); // retract - } - break; - case '+': - ch = fgetc(sourceFile); - if (ch == '+') token.number = tinc; - else if (ch == '=') token.number = taddAssign; - else { - token.number = tplus; - ungetc(ch, sourceFile); // retract - } - break; - case '-': - ch = fgetc(sourceFile); - if (ch == '-') token.number = tdec; - else if (ch == '=') token.number = tsubAssign; - else { - token.number = tminus; - ungetc(ch, sourceFile); // retract - } - break; - case '<': - ch = fgetc(sourceFile); - if (ch == '=') token.number = tlesse; - else { - token.number = tless; - ungetc(ch, sourceFile); // retract - } - break; - case '=': - ch = fgetc(sourceFile); - if (ch == '=') token.number = tequal; - else { - token.number = tassign; - ungetc(ch, sourceFile); // retract + if (ch == '.') { + // floating point가 있는 경우 실수로 판단하고 나머지 부분도 계산해야함. + float tmp_float = getDecPoint(sourceFile); + int tmp_exp = 1; + ch = fgetc(sourceFile); + if (ch == 'e') { + // 지수부가 존재하면 계산. + tmp_exp = getExpNum(sourceFile, ch); + } + token.number = trealnumber; + token.value.real_num = ((float)(tmp_num) + tmp_float)*pow(10, tmp_exp); } - break; - case '>': - ch = fgetc(sourceFile); - if (ch == '=') token.number = tgreate; else { - token.number = tgreat; - ungetc(ch, sourceFile); // retract + // 실수가 아닌 경우 정수로 판단. + token.number = tnumber; + token.value.num = tmp_num; + ungetc(ch, sourceFile); /* retract */ } - break; - case '|': - ch = fgetc(sourceFile); - if (ch == '|') token.number = tor; - else { - lexicalError(3); - ungetc(ch, sourceFile); // retract + } + else if (ch == '\'') // character + { + /* + 문자는 작은 따옴표 ' 다음 문자 그리고 ' 가 순서대로 나열된다. + */ + token.number = tcharacter; + token.value.character = fgetc(sourceFile); // 문자는 하나만 받을 수 있음. + char endc = fgetc(sourceFile); + //항상 ' 으로 끝나야 함. + if (endc != '\'') + { + lexicalError(5); } - break; - case '(': token.number = tlparen; break; - case ')': token.number = trparen; break; - case ',': token.number = tcomma; break; - case ';': token.number = tsemicolon; break; - case '[': token.number = tlbracket; break; - case ']': token.number = trbracket; break; - case '{': token.number = tlbrace; break; - case '}': token.number = trbrace; break; - case EOF: token.number = teof; break; - default: { - printf("Current character : %c", ch); - lexicalError(4); - break; } + else if (ch == '"') // string + { // + token.number = tstring; + strcpy_s(token.value.string, sizeof(token.value.string), getString(sourceFile)); + } + else switch (ch) { // special character + case '/': + ch = fgetc(sourceFile); + if (ch == '*') // text comment + do { + while (ch != '*') ch = fgetc(sourceFile); + ch = fgetc(sourceFile); + } while (ch != '/'); + else if (ch == '/') // line comment + while (fgetc(sourceFile) != '\n'); + else if (ch == '=') token.number = tdivAssign; + else { + token.number = tdiv; + ungetc(ch, sourceFile); // retract + } + break; + case '!': + ch = fgetc(sourceFile); + if (ch == '=') token.number = tnotequ; + else { + token.number = tnot; + ungetc(ch, sourceFile); // retract + } + break; + case '%': + ch = fgetc(sourceFile); + if (ch == '=') { + token.number = tremAssign; + } + else { + token.number = tremainder; + ungetc(ch, sourceFile); + } + break; + case '&': + ch = fgetc(sourceFile); + if (ch == '&') token.number = tand; + else { + lexicalError(2); + ungetc(ch, sourceFile); // retract + } + break; + case '*': + ch = fgetc(sourceFile); + if (ch == '=') token.number = tmulAssign; + else { + token.number = tmul; + ungetc(ch, sourceFile); // retract + } + break; + case '+': + ch = fgetc(sourceFile); + if (ch == '+') token.number = tinc; + else if (ch == '=') token.number = taddAssign; + else { + token.number = tplus; + ungetc(ch, sourceFile); // retract + } + break; + case '-': + ch = fgetc(sourceFile); + if (ch == '-') token.number = tdec; + else if (ch == '=') token.number = tsubAssign; + else { + token.number = tminus; + ungetc(ch, sourceFile); // retract + } + break; + case '<': + ch = fgetc(sourceFile); + if (ch == '=') token.number = tlesse; + else { + token.number = tless; + ungetc(ch, sourceFile); // retract + } + break; + case '=': + ch = fgetc(sourceFile); + if (ch == '=') token.number = tequal; + else { + token.number = tassign; + ungetc(ch, sourceFile); // retract + } + break; + case '>': + ch = fgetc(sourceFile); + if (ch == '=') token.number = tgreate; + else { + token.number = tgreat; + ungetc(ch, sourceFile); // retract + } + break; + case '|': + ch = fgetc(sourceFile); + if (ch == '|') token.number = tor; + else { + lexicalError(3); + ungetc(ch, sourceFile); // retract + } + break; + case '(': token.number = tlparen; break; + case ')': token.number = trparen; break; + case ',': token.number = tcomma; break; + case ';': token.number = tsemicolon; break; + case '[': token.number = tlbracket; break; + case ']': token.number = trbracket; break; + case '{': token.number = tlbrace; break; + case '}': token.number = trbrace; break; + case EOF: token.number = teof; break; + default: { + printf("Current character : %c", ch); + lexicalError(4); + break; + } } // switch end } while (token.number == tnull); @@ -206,6 +263,12 @@ void lexicalError(int n) break; case 4: printf("invalid character\n"); break; + case 5: printf("character form must be 'your character'. \n"); + break; + case 6: printf("length of string must be less than 22.\n"); + break; + default: + break; } } @@ -221,6 +284,34 @@ int superLetterOrDigit(char ch) else return 0; } +char* getString(FILE* sourcefile) +{ + /* + string의 길이는 22('\0' 포함)으로 고정. + */ + char string[22] = ""; + char end = 0; + + char ch = fgetc(sourcefile); + do { + if (ch == '\\') { + /* \ 가 입력으로 들어온 경우 + \을 제외한 모든 문자열을 한번 받고 돌아온다. + */ + string[end++] = ch; + ch = fgetc(sourcefile); + string[end++] = ch; + } + else { + // 나머지 경우는 문자열에 붙임 + string[end++] = ch; + } + ch = fgetc(sourcefile); + } while (ch != '"'); + string[end] = '\0'; + return string; +} + int getNumber(FILE *sourceFile, char firstCharacter) { int num = 0; @@ -246,11 +337,57 @@ int getNumber(FILE *sourceFile, char firstCharacter) num = 10 * num + (int)(ch - '0'); ch = fgetc(sourceFile); } while (isdigit(ch)); + } + ungetc(ch, sourceFile); /* retract */ + return num; +} + +float getDecPoint(FILE* sourceFile) +{ + // floating point를 읽는 함수 + float num = 0.0; + int exp=-1; + char ch; + // 실수 부분 읽기 + ch = fgetc(sourceFile); // '.' 다음 정수를 읽음. + while (isdigit(ch)) { + num += (double)((ch - '0') * pow(10, exp--)); + ch = fgetc(sourceFile); } ungetc(ch, sourceFile); /* retract */ return num; } +int getExpNum(FILE* sourceFile) +{ + // 지수부를 계산하는 함수 + char ch; + int exp_num = 0; // 뒤에 숫자가 안붙는 경우는 0으로 처리 + int flag = 1; + ch = fgetc(sourceFile); + /* + + or 바로 숫자가 나오는 경우 양의 지수 + - 가 나오는 경우 음의 지수로 판단. + */ + if (ch == '+') { + ch = fgetc(sourceFile); + } + else if (ch == '-') { + flag = -1; + ch = fgetc(sourceFile); + } + if (isdigit(ch)) + { + do { + exp_num += (10 * exp_num + (int)(ch - '0')); + ch = fgetc(sourceFile); + } while (isdigit(ch)); + } + exp_num *= flag; + ungetc(ch, sourceFile); /* retract */ + return exp_num; +} + int hexValue(char ch) { switch (ch) { @@ -266,15 +403,24 @@ int hexValue(char ch) } void writeToken(struct tokenType token, FILE *outputFile) -{ +{ // if (token.number == tident) { fprintf(outputFile, "Token %10s ( %3d, %12s )\n", tokenName[token.number], token.number, token.value.id); } else if (token.number == tnumber) { fprintf(outputFile, "Token %10s ( %3d, %12d )\n", tokenName[token.number], token.number, token.value.num); } + else if (token.number == trealnumber) { + fprintf(outputFile, "Token %10s ( %3d, %12.6f )\n", tokenName[token.number], token.number, token.value.real_num); + } + else if (token.number == tcharacter) { + fprintf(outputFile, "Token %10s ( %3d, %c )\n", tokenName[token.number], token.number, token.value.character); + } + else if (token.number == tstring) { + fprintf(outputFile, "Token %10s ( %3d, %s )\n", tokenName[token.number], token.number, token.value.string); + } else { fprintf(outputFile, "Token %10s ( %3d, %12s )\n", tokenName[token.number], token.number, ""); } -} +} \ No newline at end of file diff --git a/MiniCScanner/Scanner.h b/MiniCScanner/Scanner.h index 33c8ae6..31fad65 100644 --- a/MiniCScanner/Scanner.h +++ b/MiniCScanner/Scanner.h @@ -11,16 +11,21 @@ #include -#define NO_KEYWORD 7 -#define ID_LENGTH 12 - - +#define NO_KEYWORD 15 +#define ID_LENGTH 30 struct tokenType { int number; union { + /* + Ǽ , ڿ ߰. + ID_LENGTH 30 ø. + */ char id[ID_LENGTH]; - int num; + int num; // + float real_num; // Ǽ + char character; // + char string[22]; // ڿ (string symbol ̰ 7(%string)̱ 22 .) } value; }; @@ -36,21 +41,27 @@ enum tsymbol { /* 18 19 20 21 22 23 */ tequal, tgreat, tgreate, tlbracket, trbracket, teof, /* 24 25 26 27 28 29 */ + trealnumber, tcharacter, tstring, + /* 30 31 32 Ǽ, , ڿ literal ߰ */ // ........... word symbols ................................. // - /* 30 31 32 33 34 35 */ - tconst, telse, tif, tint, treturn, tvoid, - /* 36 37 38 39 */ - twhile, tlbrace, tor, trbrace + /* 33 34 35 36 37 38 */ + tconst, telse, tif, tint, treturn, tvoid, + /* 39 40 41 42 43 44 */ + twhile, tlbrace, tor, trbrace, tchar, tdouble, + /* 45 46 47 48 49 50 */ + tfor, tswitch, tcase, tdefault, tcontinue, tbreak, }; int superLetter(char ch); int superLetterOrDigit(char ch); +char* getString(FILE* sourcefile); int getNumber(FILE *sourceFile, char firstCharacter); +float getDecPoint(FILE* sourceFile); +int getExpNum(FILE* sourceFile); int hexValue(char ch); void lexicalError(int n); struct tokenType scanner(FILE *sourceFile); void writeToken(struct tokenType token, FILE* outputFile); - #endif // !SCANNER_H diff --git a/MiniCScanner/Scanner.o b/MiniCScanner/Scanner.o new file mode 100644 index 0000000..75a53b8 Binary files /dev/null and b/MiniCScanner/Scanner.o differ diff --git a/MiniCScanner/a.out b/MiniCScanner/a.out new file mode 100755 index 0000000..69a0756 Binary files /dev/null and b/MiniCScanner/a.out differ diff --git a/MiniCScanner/char.mc b/MiniCScanner/char.mc new file mode 100644 index 0000000..5464844 --- /dev/null +++ b/MiniCScanner/char.mc @@ -0,0 +1,6 @@ +void main() +{ + char ch; + ch = 'a'; + write(i); // printf it +} \ No newline at end of file diff --git a/MiniCScanner/for.mc b/MiniCScanner/for.mc new file mode 100644 index 0000000..f8f9b12 --- /dev/null +++ b/MiniCScanner/for.mc @@ -0,0 +1,19 @@ +void main() +{ + // char, double, string,for, switch, case, default, continue, break + int x; + double y; + char t; + char a[10]; + y = 3.141519e+10; + t = 'q'; + a = "This is string."; + for( int i=0; i<=10; i++) + { + x = 333; + x++; + write(x); + x %= 10; + write(x); + } +} \ No newline at end of file diff --git a/MiniCScanner/for.out b/MiniCScanner/for.out new file mode 100644 index 0000000..6c43c4a --- /dev/null +++ b/MiniCScanner/for.out @@ -0,0 +1,47 @@ +Token void ( 35, ) +Token %ident ( 4, main ) +Token ( ( 7, ) +Token ) ( 8, ) +Token { ( 37, ) +Token int ( 33, ) +Token %ident ( 4, x ) +Token ; ( 20, ) +Token for ( 42, ) +Token ( ( 7, ) +Token int ( 33, ) +Token %ident ( 4, i ) +Token = ( 23, ) +Token %number ( 5, 0 ) +Token ; ( 20, ) +Token %ident ( 4, i ) +Token <= ( 22, ) +Token %number ( 5, 10 ) +Token ; ( 20, ) +Token %ident ( 4, i ) +Token ++ ( 12, ) +Token ) ( 8, ) +Token { ( 37, ) +Token %ident ( 4, x ) +Token = ( 23, ) +Token %number ( 5, 333 ) +Token ; ( 20, ) +Token %ident ( 4, x ) +Token ++ ( 12, ) +Token ; ( 20, ) +Token %ident ( 4, write ) +Token ( ( 7, ) +Token %ident ( 4, x ) +Token ) ( 8, ) +Token ; ( 20, ) +Token %ident ( 4, x ) +Token %= ( 3, ) +Token %number ( 5, 10 ) +Token ; ( 20, ) +Token %ident ( 4, write ) +Token ( ( 7, ) +Token %ident ( 4, x ) +Token ) ( 8, ) +Token ; ( 20, ) +Token } ( 39, ) +Token } ( 39, ) +Token eof ( 29, ) diff --git a/MiniCScanner/mod.mc b/MiniCScanner/mod.mc new file mode 100644 index 0000000..de40d3c --- /dev/null +++ b/MiniCScanner/mod.mc @@ -0,0 +1,10 @@ +void main() +{ + int x; + + x = 333; + x++; + write(x); + x %= 10; + write(x); +} diff --git a/MiniCScanner/mod.out b/MiniCScanner/mod.out new file mode 100644 index 0000000..204099f --- /dev/null +++ b/MiniCScanner/mod.out @@ -0,0 +1,31 @@ +Token void ( 35, ) +Token %ident ( 4, main ) +Token ( ( 7, ) +Token ) ( 8, ) +Token { ( 37, ) +Token int ( 33, ) +Token %ident ( 4, x ) +Token ; ( 20, ) +Token %ident ( 4, x ) +Token = ( 23, ) +Token %number ( 5, 333 ) +Token ; ( 20, ) +Token %ident ( 4, x ) +Token ++ ( 12, ) +Token ; ( 20, ) +Token %ident ( 4, write ) +Token ( ( 7, ) +Token %ident ( 4, x ) +Token ) ( 8, ) +Token ; ( 20, ) +Token %ident ( 4, x ) +Token %= ( 3, ) +Token %number ( 5, 10 ) +Token ; ( 20, ) +Token %ident ( 4, write ) +Token ( ( 7, ) +Token %ident ( 4, x ) +Token ) ( 8, ) +Token ; ( 20, ) +Token } ( 39, ) +Token eof ( 29, ) diff --git a/MiniCScanner/new_keyword.mc b/MiniCScanner/new_keyword.mc new file mode 100644 index 0000000..a70513a --- /dev/null +++ b/MiniCScanner/new_keyword.mc @@ -0,0 +1,25 @@ +void main() +{ + char ch; + char chs[10]; + string str; + int x; + double y; + ch = 't'; + chs = "test"; + str = "string?"; + x = 10; + y = 3.141519e+10; + for(int i=0;i<3;i++) { + if(i==1) break; + else continue; + } + switch(ch) + { + case 't': + read(ch); + break; + default: + break; + } +} diff --git a/MiniCScanner/x64/Debug/MiniCScanner.log b/MiniCScanner/x64/Debug/MiniCScanner.log new file mode 100644 index 0000000..2ee3c62 --- /dev/null +++ b/MiniCScanner/x64/Debug/MiniCScanner.log @@ -0,0 +1,5 @@ + MiniCScannerTester.c +C:\Users\speci\OneDrive\바탕 화면\MiniCScanner\MiniCScanner\MiniCScannerTester.c(58,10): warning C4473: 'printf' : not enough arguments passed for format string +C:\Users\speci\OneDrive\바탕 화면\MiniCScanner\MiniCScanner\MiniCScannerTester.c(58,10): message : placeholders and their parameters expect 1 variadic arguments, but 0 were provided +C:\Users\speci\OneDrive\바탕 화면\MiniCScanner\MiniCScanner\MiniCScannerTester.c(58,10): message : the missing variadic argument 1 is required by format string '%c' + MiniCScanner.vcxproj -> C:\Users\speci\OneDrive\바탕 화면\MiniCScanner\x64\Debug\MiniCScanner.exe diff --git a/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.command.1.tlog b/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.command.1.tlog new file mode 100644 index 0000000..3bdd35b Binary files /dev/null and b/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.command.1.tlog differ diff --git a/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.read.1.tlog b/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.read.1.tlog new file mode 100644 index 0000000..64be42e Binary files /dev/null and b/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.read.1.tlog differ diff --git a/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.write.1.tlog b/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.write.1.tlog new file mode 100644 index 0000000..77937bc Binary files /dev/null and b/MiniCScanner/x64/Debug/MiniCScanner.tlog/CL.write.1.tlog differ diff --git a/MiniCScanner/x64/Debug/MiniCScanner.tlog/MiniCScanner.lastbuildstate b/MiniCScanner/x64/Debug/MiniCScanner.tlog/MiniCScanner.lastbuildstate new file mode 100644 index 0000000..10fd3d3 --- /dev/null +++ b/MiniCScanner/x64/Debug/MiniCScanner.tlog/MiniCScanner.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v142:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0 +Debug|x64|C:\Users\speci\OneDrive\바탕 화면\MiniCScanner\| diff --git a/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.command.1.tlog b/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.command.1.tlog new file mode 100644 index 0000000..e6b9110 Binary files /dev/null and b/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.command.1.tlog differ diff --git a/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.read.1.tlog b/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.read.1.tlog new file mode 100644 index 0000000..2ff63cf Binary files /dev/null and b/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.read.1.tlog differ diff --git a/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.write.1.tlog b/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.write.1.tlog new file mode 100644 index 0000000..d3d5a8b Binary files /dev/null and b/MiniCScanner/x64/Debug/MiniCScanner.tlog/link.write.1.tlog differ diff --git a/MiniCScanner/x64/Debug/MiniCScannerTester.obj b/MiniCScanner/x64/Debug/MiniCScannerTester.obj new file mode 100644 index 0000000..b69b284 Binary files /dev/null and b/MiniCScanner/x64/Debug/MiniCScannerTester.obj differ diff --git a/MiniCScanner/x64/Debug/Scanner.obj b/MiniCScanner/x64/Debug/Scanner.obj new file mode 100644 index 0000000..c3f6750 Binary files /dev/null and b/MiniCScanner/x64/Debug/Scanner.obj differ diff --git a/MiniCScanner/x64/Debug/vc142.idb b/MiniCScanner/x64/Debug/vc142.idb new file mode 100644 index 0000000..6b945b2 Binary files /dev/null and b/MiniCScanner/x64/Debug/vc142.idb differ diff --git a/MiniCScanner/x64/Debug/vc142.pdb b/MiniCScanner/x64/Debug/vc142.pdb new file mode 100644 index 0000000..2ed9a69 Binary files /dev/null and b/MiniCScanner/x64/Debug/vc142.pdb differ diff --git a/test b/test new file mode 100644 index 0000000..5f2f16b --- /dev/null +++ b/test @@ -0,0 +1 @@ +1111