#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" BUILD_DIR="$ROOT_DIR/build" ANTLR_DIR="$BUILD_DIR/generated/antlr4" JAR_PATH="$ROOT_DIR/third_party/antlr-4.13.2-complete.jar" GRAMMAR_PATH="$ROOT_DIR/src/antlr4/SysY.g4" COMPILER="$BUILD_DIR/bin/compiler" echo "[1/4] Generating ANTLR sources..." mkdir -p "$ANTLR_DIR" java -jar "$JAR_PATH" \ -Dlanguage=Cpp \ -visitor -no-listener \ -Xexact-output-dir \ -o "$ANTLR_DIR" \ "$GRAMMAR_PATH" echo "[2/4] Configuring CMake..." cmake -S "$ROOT_DIR" -B "$BUILD_DIR" -DCMAKE_BUILD_TYPE=Release echo "[3/4] Building project..." cmake --build "$BUILD_DIR" -j "$(nproc)" echo "[4/4] Running parse-tree tests..." failed=0 for case_file in "$ROOT_DIR"/test/test_case/functional/*.sy "$ROOT_DIR"/test/test_case/performance/*.sy; do if ! "$COMPILER" --emit-parse-tree "$case_file" >/dev/null 2>/tmp/lab1_parse.err; then echo "FAIL: $case_file" cat /tmp/lab1_parse.err failed=1 else echo "PASS: $case_file" fi done if [[ "$failed" -ne 0 ]]; then echo "Batch test finished with failures." exit 1 fi echo "Batch test passed."