Мне нужно создать некий компилятор, который находит и печатает первую ошибку в 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».Только в случае повторного развертывания я получу хороший ответ.