분류 전체보기 211

[JAVA] JAVA란?

참고도서 이것이 자바다 JAVA 특징 1. 모든 운영체제에서 실행 가능 JVM(Java Virtual Machine) : 운영체제에 종속받지 않고 CPU가 자바를 인식, 실행할 수 있게 하는 가상 컴퓨터다. 2. 객체 지향 프로그래밍 (Object Oriented Programming, OOP) 객체들을 연결해 더 큰 프로그램을 완성할 수 있다. 3. 메모리 자동 정리 JVM의 Garbage collection을 통해 사용하지 않는 메모리가 지동으로 정리된다. 4. 무료 라이브러리 풍부 javac.exe : 자바 소스파일 컴파일 java.exe : 자바 프로그램 실행 바이트코드 파일 javac로 컴파일하면 바이트코드 파일이 생성된다. .java ----- javac -----> .class 소스파일 컴파..

[push_swap]

복잡도 (Complexity) 알고리즘 성능 분석을 위한 방법 시간 복잡도와 공간 복잡도가 있다. 시간 복잡도 (Time Complexity) 알고리즘을 실행할 때, 실행된 명령문의 실행 빈도수 (연산의 횟수) -> 실행 시간으로 할 경우 OS, IDE, 플랫폼에서 동일한 결과가 나오지 않는다. Best case : 최소 리소스(시간 복잡도) 사용량 Worst case : 최악 리소스(시간 복잡도) 사용량 Average case : 평균 리소스(시간 복잡도) 사용량 공간 복잡도 (Space Complexity) 알고리즘이 완전히 실행될 때까지 필요한 저장 공간 - 시간 복잡도와 공간 복잡도는 반비례하는 경향이 있어 알고리즘의 성능을 판단할 때는 시간 복잡도 위주로 판단한다. 빅오 표기법 (Big-O no..

42SEOUL 2022.07.03

[minitalk] 개념정리

Unix Signal을 이용해 Client와 Server 사이에 Communication 프로그램 시그널 (SIGNAL) 유닉스 계열 운영체제에서 쓰이는 Software interrupt process에 특정 이벤트가 발생했을 때 신호를 비동기적으로 보내는 것 - Signal을 받은 프로세스는 Signal에 따른 미리 지정된 기본 동작(default action)을 수행할 수 있고, 사용자가 미리 지정해 놓은 함수에 의해 무시하거나 특별한 처리를 할 수 있다. ex) 리눅스에서 [Ctrl + c] || [Ctrl + z]를 누르면, 프로그램이 강제종료된다. -> 프로그램이 실행중에 개입해 강제로 종료시킨 것 즉, 예외상황이 발생했을 때 신호가 가고, 운영체제에서 이를 캐치하여 해결을 위한 행동을 취한 것..

42SEOUL 2022.06.26

[born2beroot] 서브젝트 설정

sudo 설정 #sudo 설치여부 확인 dpkg -l sudo apt-get update //패키지 목록 업데이트 apt-get install sudo visudo //sudoer 파일 접근해서 옵션 설정 Defaultsauthfail_message="원하는 에러메세지" #권한 획득 실패 시 (sudo 인증 실패 시) Defaultsbadpass_message="원하는 에러메세지" #sudo인증 비번 실패 시 Defaultslog_input #sudo명령어 실행했을 때 입력된 명령어 log로 저장 Defaultslog_output #sudo명령어 실행했을 때 출력 결과를 log로 저장 Defaultsrequiretty #sudo명령어 실행했을 때 tty강제 Defaultsiolog_dir="/var/lo..

42SEOUL 2022.06.17

[Compiler] 14. Language Processor (interperter, bootstrapping)

Language Processor - 처리할 수 있는 프로그램 (translated or interpreted) - 두 가지 종류의 언어 프로세서 : Translator, Interpereter - translator는 한 언어로 표현된 텍스트를 받아들이고, 다른 언어로 표현된 semantically-equivalent 텍스트를 생성하는 프로그램 assembler는 assembly 언어에서 기계 언어로 translate 한다. 컴파일러는 high-level의 언어를 low-level의 언어로 번역한다. High-level Language -> Compiler(Program) -> object code 컴파일러는 구현 언어로 작성된다. - Interpreter는 소스 프로그램을 받아들이고, 소스프로그램을 ..

학교/컴파일러 2022.06.10

[Compiler] 13. Semantic analyzer

Semantic analyzer (의미분석) - 프로그램의 semantics은 "meaning" 이다. - 구문적으론 올바르지만 의미상 틀린 것 - 일치하지 않는 Type, 선언되지 않은 변수 사용, 잘못된 인수로 호출된 함수, access 위반 등 확인 - syntax tree에 주석 달기 -> type 정보(attribute) 포함 - tree의 할당이 적절한지 확인 ex) integer가 맞는가? - 프로그램의 syntactic 구조를 알면, 컴파일에 필요한 추가 정보를 계산한다. - 언어의 의미를 지정하기 위해 사용되는 표준 방법은 없다. -> 알고리즘은 parsing 알고리즘만큼 명확하게 표현되지 않는다. Attribute and binding - Attribute 프로그래밍 언어 구조의 모든 ..

학교/컴파일러 2022.06.10

[Compiler] 11-2. Bottom-up parsing

SLR(1) Parsing = Simple LR(1) Parsing 1 -> Lookahead를 한다! - LR(0) item으로 만들어진 DFA를 그대로 사용한다. input string의 다음 token을 사용해 action을 수행하여, LR(0) parsing의 power를 높인다. DFA를 구성할 때 LR(0) || SLR(1)은 lookahead를 무시한다. -> SLR(1)은 lookahead를 하지만 만들 때 현재 parsing state의 DFA들은 LR(0) item을 그대로 쓰기 때문에 simple 일반 LR(1)은 DFA를 구성할 때 lookahead를 사용한다. - Two ways 적절한 DFA 전환이 존재하는지 확인하기 위해 transition 전에 input token을 참조한다..

학교/컴파일러 2022.06.09