Skip to content

Commit

Permalink
more error types; improved string const handling
Browse files Browse the repository at this point in the history
  • Loading branch information
blackskygg committed Feb 22, 2017
1 parent de618f5 commit b7c2808
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 26 deletions.
8 changes: 4 additions & 4 deletions sIDE/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ MOVE = mv -f
TAR = tar -cf
COMPRESS = gzip -9f
DISTNAME = sIDE1.0.0
DISTDIR = /home/sky/homework/c_asm_ds/sIDE/.tmp/sIDE1.0.0
DISTDIR = /home/sky/lab/projects/sIDE/sIDE/.tmp/sIDE1.0.0
LINK = g++
LFLAGS = -Wl,-O1 -Wl,-O1,--sort-common,--as-needed,-z,relro
LIBS = $(SUBLIBS) -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread
Expand Down Expand Up @@ -627,17 +627,17 @@ moc_mainwindow.cpp: consoleworker.h \
mainwindow.h \
moc_predefs.h \
/usr/bin/moc
/usr/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/sky/homework/c_asm_ds/sIDE -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/6.3.1 -I/usr/include/c++/6.3.1/x86_64-pc-linux-gnu -I/usr/include/c++/6.3.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed -I/usr/include mainwindow.h -o moc_mainwindow.cpp
/usr/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/sky/lab/projects/sIDE/sIDE -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/6.3.1 -I/usr/include/c++/6.3.1/x86_64-pc-linux-gnu -I/usr/include/c++/6.3.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed -I/usr/include mainwindow.h -o moc_mainwindow.cpp

moc_consoleworker.cpp: consoleworker.h \
moc_predefs.h \
/usr/bin/moc
/usr/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/sky/homework/c_asm_ds/sIDE -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/6.3.1 -I/usr/include/c++/6.3.1/x86_64-pc-linux-gnu -I/usr/include/c++/6.3.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed -I/usr/include consoleworker.h -o moc_consoleworker.cpp
/usr/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/sky/lab/projects/sIDE/sIDE -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/6.3.1 -I/usr/include/c++/6.3.1/x86_64-pc-linux-gnu -I/usr/include/c++/6.3.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed -I/usr/include consoleworker.h -o moc_consoleworker.cpp

moc_asmeditor.cpp: asmeditor.h \
moc_predefs.h \
/usr/bin/moc
/usr/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/sky/homework/c_asm_ds/sIDE -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/6.3.1 -I/usr/include/c++/6.3.1/x86_64-pc-linux-gnu -I/usr/include/c++/6.3.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed -I/usr/include asmeditor.h -o moc_asmeditor.cpp
/usr/bin/moc $(DEFINES) --include ./moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/home/sky/lab/projects/sIDE/sIDE -I/usr/include/qt -I/usr/include/qt/QtWidgets -I/usr/include/qt/QtGui -I/usr/include/qt/QtCore -I/usr/include/c++/6.3.1 -I/usr/include/c++/6.3.1/x86_64-pc-linux-gnu -I/usr/include/c++/6.3.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/6.3.1/include-fixed -I/usr/include asmeditor.h -o moc_asmeditor.cpp

compiler_moc_source_make_all:
compiler_moc_source_clean:
Expand Down
4 changes: 2 additions & 2 deletions sIDE/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ void MainWindow::on_assemble_triggered()
ui->actionAssemble_Run->setEnabled(false);

ui->tabWidget->setCurrentWidget(ui->tabAssembler);
assembleWorker->execute(tr("sas.exe"), args);
assembleWorker->execute(tr("./sas.exe"), args);
}

void MainWindow::on_runThread_started()
Expand Down Expand Up @@ -308,7 +308,7 @@ void MainWindow::on_run_triggered()

ui->actionRun->setEnabled(false);
ui->actionKill->setEnabled(true);
runWorker->execute(tr("ssim.exe"), args);
runWorker->execute(tr("./ssim.exe"), args);
}

void MainWindow::on_stop_triggered()
Expand Down
59 changes: 39 additions & 20 deletions sas/sas.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,10 @@ FILE *g_fin, *g_fout;
FILE *g_flist;

// Translate a string to uppercase.
// But characters surrounded by "" or with proceeding # will be ignored.
// But characters surrounded by "" will be ignored.
void str_toupper(char *str) {
bool in_quote = false;

for (; *str && '#' != *str; ++str) {
if ('\"' == *str) {
in_quote = !in_quote;
} else {
if (!in_quote)
*str = toupper(*str);
}
for (; *str && '\"' != *str; ++str) {
*str = toupper(*str);
}
}

Expand Down Expand Up @@ -240,15 +233,30 @@ int process_bracket(char **curr_ptr, size_t elem_size) {
// Process string constant initializers.
// Returns the string length on sucess, negative number on failure.
int process_string_const(char **line) {
char string[LINE_BUF_SIZE], len;

if (1 != sscanf(*line, "\"%[^\"]\"", string)) return -1;

len = strlen(string);
fwrite(string, len + 1, 1, g_fout);
*line += len+2;
char str[LINE_BUF_SIZE], *str_ptr, *line_ptr;
int len = 0;

str_ptr = str;
line_ptr = *line + 1;
for (; *line_ptr && '\"' != *line_ptr; ++line_ptr) {
if ('\\' == *line_ptr) {
if (*++line_ptr) {
*str_ptr++ = *line_ptr;
} else {
return -1;
}
} else {
*str_ptr++ = *line_ptr;
}
}
*str_ptr = 0;

if ('\"' != *line_ptr) return -1; // Unmatched quotes
len = str_ptr-str+1;
fwrite(str, len, 1, g_fout);
*line = line_ptr + 1;

return len + 1;
return len;
}

// Process data definitions.
Expand Down Expand Up @@ -327,11 +335,19 @@ int process_data(char *line, char *keyword, int step) {

} else if ('\"' == *curr_ptr && 1 == elem_size) { // String
int val_num = process_string_const(&curr_ptr);
if (val_num < 0 || val_num > elem_num) return -1;
if (val_num < 0) {
puts("Illegal string constant");
return -1;
}
if (val_num > elem_num) {
puts("String constant exceeds the capacity of the array");
return -1;
}
// Fill out the rest with zeros.
fwrite(&zero, elem_size, elem_num - val_num, g_fout);

} else { // Illegal syntax.
puts("Illegal data syntax");
return -1;
}

Expand All @@ -341,7 +357,10 @@ int process_data(char *line, char *keyword, int step) {

// Process ending.
while (isspace(*curr_ptr)) curr_ptr++;
if (*curr_ptr != '\0' && *curr_ptr != '#') return -1;
if (*curr_ptr != '\0' && *curr_ptr != '#') {
printf("Trailling garbage: %s\n", curr_ptr);
return -1;
}
}

curr_ds_addr += elem_num * elem_size;
Expand Down
12 changes: 12 additions & 0 deletions test/puts.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
byte text[16] = "Say: \"Hello!\""

loadi G 0
loop:
loadb A text
equ A Z
cjmp end
out A 15
addi G 1
jmp loop
end:
ret

0 comments on commit b7c2808

Please sign in to comment.