此腳本會自動偵測作業系統,包含 Mac, Linux, Windows。此腳本會
- 編譯與執行程式
- 將程式輸出與測資輸出做比對
- 顯示測資結果
- 清空編譯產生的檔案
更新腳本權限
chmod +x ./run_tests_template.sh
更新執行程式名稱以及測資資料夾名稱
以以下檔案結構為例
| matrix_calculator.l
| matrix_calculator.y
| run_tests.sh # 測試腳本,包含編譯與執行測試,會清空編譯產生的檔案
| compile.sh # 編譯腳本,僅編譯
|
\---testcases # 檔名是對應的,一個 .in 對一個 .out
1.in
1.out
3.in
3.out
5.in
5.out
7.in
7.out
TEST_DIR="./testcases" # TODO: Change this to your test directory
PROGRAM_NAME="program" # TODO: Change this to your program name
執行腳本
./run_tests_template.sh
Sample output 1
Sample output 2
-
compile_template.sh 編譯腳本,修改檔名即可使用。會依據系統使用不同編譯指令。此腳本僅進行編譯,不會清空編譯產生的檔案。此腳本可以彈性修改編譯指令。
-
raw_compile_template.sh 寫死編譯指令的腳本,方便複製貼上使用。
On Mac
g++ --std=c++11
On Windows
g++ --std=gnu++11
On M2 Mac (arm64)
lex -o lex.yy.c lex.l
gcc -o lex lex.yy.c -ll
On Windows
flex myLexProgram.l
bison -d myYaccProgram.y
gcc -o indent lex.yy.c
On Mac
bison -d -o y.tab.c matrix_calculator.y
gcc -c -g -I.. y.tab.c
lex -o lex.yy.c matrix_calculator.l
gcc -c -g -I.. lex.yy.c
gcc -o matrix_calculator y.tab.o lex.yy.o -ll
On Windows
bison -d -o y.tab.c matrix_calculator.y
gcc -c -g -I.. y.tab.c
flex -o lex.yy.c matrix_calculator.l
gcc -c -g -I.. lex.yy.c
gcc -o matrix_calculator y.tab.o lex.yy.o -ll
How to deal with shift/reduce conflict? Use verbose mode to find out the problem.
bison -v matrix_calculator.y
It will generate a file called matrix_calculator.output
which contains the verbose information.
有些忘記截圖
2023 BA2
- BA2 Second Question
- BA2 Book Information
2023 HW3
- HW3-1 Stack Base Machine
- HW3-2 Matrix Calculator
2023 BA3
- BA1 Simple Calculator
- BA2 Stack Machine