В моем приложении Spring-boot нельзя дважды попасть на одну и ту же конечную точку - PullRequest
0 голосов
/ 26 апреля 2019

Мне нужно создать некий компилятор, который находит и печатает первую ошибку в C-коде.Мой компилятор будет состоять из нескольких модулей, сейчас я закончил два из них, Lexical Analyzer и Syntactic Analyzer.Lexical Analyzer берет весь текст и разбивает его на токены, токены добавляются в список токенов.Синтаксический анализатор получает список токенов List и проверяет, что текст записан по порядку: после IF должен быть токен LBAR, некоторое выражение и токен RBAR.Пропустив один, он выдаст проверенную ошибку и остановится.


  @PostMapping("/compile")
    public ResponseEntity<String> setInput(@RequestBody String input){
        if(compile(input)) {
            return ResponseEntity.ok("Success");
        }

        return ResponseEntity.ok("Compile error");
    }

    private boolean compile(String input){
        lexicalAnalyzer = new LexicalAnalyzer(input);
        lexicalAnalyzer.resetCompiler();

        line=1;
        while(lexicalAnalyzer.getNextToken()!=END){ }

        syntacticAnalyzer = new SyntacticAnalyzer(tokens);

        return syntacticAnalyzer.start();
    }

Используя почтальон для отправки небольшого текста в C как String, все работает хорошо, пока я не найду первую ошибку.Например:

int main(){

}

возвращает Успех

int main({
}

возвращает ошибку компиляции и выдает «Missing RPAR»

int main){
}

возвращает Успех, должен вернуть ошибку компиляции и выбрасывать«Отсутствует LBAR».Только в случае повторного развертывания я получу хороший ответ.

...