Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions Examples/for.mc
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
void main()
{
int x;

for( int i=0; i<=10; i++)
{
x = 333;
x++;
write(x);
x %= 10;
write(x);
}
}
2 changes: 1 addition & 1 deletion MiniCScanner/MiniCScanner.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="Scanner.h">
<Filter>소스 파일</Filter>
<Filter>헤더 파일</Filter>
</ClInclude>
</ItemGroup>
</Project>
4 changes: 4 additions & 0 deletions MiniCScanner/MiniCScanner.vcxproj.user
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@
<LocalDebuggerWorkingDirectory>$(ProjectDir)..\Examples\</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommandArguments>for.mc</LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>
80 changes: 44 additions & 36 deletions MiniCScanner/MiniCScannerTester.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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"
}

Loading