이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

Computer Science/Universial Programming Language

  • 시간의화살
[UPL] Type System

[UPL] Type System

2025.06.01
프로그램은 그냥 문자열일 뿐인고 Parser는 그 문자열을 특정 시각으로 바라보고 AST로 변환한다.인터프리터는 AST로 변환된 프로그램을 바로 Interpret 하고, 컴파일러는 기계어로 컴파일 후 실행한다. Syntax가 올바르다고 모두 올바른 프로그램은 아니다. 모든 프로그래밍 언어에는 Undefined Behaviors가 존재하고, AST로 제대로 변환되더라도 의도하지 않은 실행 결과를 마주할 수 있다.Undefined - 정의하지 않음 Unspec - 기술하지 않았지만 어떻게 실행되든 상관없음 UB의 예시로는.. null값에 대한 dereference, 주소 값 끼리의 대소비교, 파라미터 계산 순서 등이 있다. Semantics를 정의할 때 Inference Rule을 사용하는데, In..
[UPL] MiniC 구현

[UPL] MiniC 구현

2025.05.26
Imperative Language는 명령어를 수행할 때 프로그램의 메모리 상태를 변경하는 언어로, Statement를 통해 메모리를 변경한다.C C++ Java Python 모두 Statement를 사용하는 Imperative Language이다. Functional Language는 함수를 값으로 다루는 언어지만 Statement를 가질 수 있다.OCaml은 Statement가 없고 Declaration과 Expression만 가진다. Functional Language와 Imperative Language는 서로 대비되는 개념이 아니고, 공존할 수 있다 (JavaScript) Statement안에 Statement가 위치할 수 있다. Java C 같은 언어에서는 if 구문이 값을 반환하지 않으니 S..
[UPL] Recursion

[UPL] Recursion

2025.05.18
함수 몸체에서 자기자신을 직접 호출하는것도 재귀인자기가 부른 함수가 자기를 호출하는것도 재귀라고 할 수 있다. (간접 재귀) 조건 분기문을 추가한 언어인 CFVAE에서는 함수 몸체에서 함수 자신을 호출할 때 아직 자신이 정의되지 않은 상태라 저장소에 들어오지 않았고, 따라서 Recursion이 불가능하다. OCaml처럼 Concrete Syntax에 rec키워드를 추가해 rec가 붙어있으면 재귀호출이 가능한 함수, 붙어있지 않으면 재귀호출이 불가능한 함수로 구분해서 구현할 수 있는 RCFVAE 언어를 정의해보자. 일단 Concrete Syntax 먼저.. 함수를 선언할 때 rec 키워드를 붙일 수 있도록 하자. 기존 함수 정의를 사용할 때, expr1에서 var는 free identifier였지만..
[UPL] Conditional Branch

[UPL] Conditional Branch

2025.05.15
expression은 값으로 계산되는 코드조각이고, statement는 프로그램의 메모리를 변환시키는 코드조각이다. expression을 계산할 때는 Store에서 Expression을 받아 계산한 Value를 돌려주고,statement를 계산할 때는 Store를 받아 Statement를 실행하면 새로 업데이트한 Store를 돌려준다. 삼항연산자는 조건분기문의 expression 버전으로, 값으로 계산된다. Concrete Syntax를 정의해보자.기존 언어에서 if - then - else 을 추가하고, 크기 비교 연산자와 논리값을 추가하자. Functional Language처럼 분기를 조작할 때는 expression을 사용한다. if - then - else 구문을 사용할 때 어디까지..
[UPL] 고차원 함수와 일차원 함수

[UPL] 고차원 함수와 일차원 함수

2025.04.18
이전에 정의한 언어인 VAE에 함수를 추가해 F1VAE를 정의해보자 (First Order Function and VAE) 여기서 함수는 수학에서 가져온 용어지만, 수학과는 다르게 같은 값에 대해 다른 출력이 있을 수 있다. (Side Effect)Pure Functional Language는 함수에서도 Side Effect가 없지만.. 우선 일반적인 프로그래밍 언어에서는 함수 호출에 대한 Side Effect가 발생할 수 있다. Higher Order Function - 고차원함수로 함수를 인자로 받거나 반환할 수 있다. (1등 시민)First Order Function - 일차원함수로 함수를 인자로 받을 수 없고, 반환값으로 사용할 수도 없다. (2등 시민) 지금 정의하는 F1VAE는 First O..
[UPL] Arithmetic Expression 정의

[UPL] Arithmetic Expression 정의

2025.04.08
Syntax와 Semantics를 정의해 간단한 언어인 Arithmetic Expression을 정의해보자.AE는 정수 사이의 덧셈과 뺄셈으로 구성된다. Concrete Syntax BNF 를 사용해서 정의한다.개발자가 직접 작성하는 코드의 구조와 모양으로, 실제로 코드에서 보게 되는 문자 단위의 문법을 의미한다.파싱에서 중요한 역할을 수행하고, 언어의 문법을 정의할 때 첫 단계로 사용된다. Abstract Syntax프로그램을 나타내는 트리 형태의 구문구조이다.프로그램은 여러 개의 구문으로 구성되고.. 각 구문은 또 세부 구문으로 구성된다. 파서가 이미 파싱해서 AST를 줬고.. 이 AST는 컴파일러나 인터프리터가 사용한다.즉, Concrete Syntax를 파싱하면 Parse Tree가..
[UPL] Syntax & Parsing

[UPL] Syntax & Parsing

2025.04.04
프로그래밍 언어는 문자열의 집합이고, 프로그래밍 언어로 작성된 프로그램은 문자열이라고 생각할 수 있다.그렇다고 아무 문자열이나 프로그래밍 언어가 될 수 있는 건 아니다. 특정 문법에 부합해야 프로그래밍 언어가 될 수 있다. 문자열 s가 프로그래밍 언어인지 판단하는 함수 L(G) 를 생각해보자.s가 L(G)의 집합에 포함된다면 s는 프로그래밍 언어라고 할 수 있다. 위의 Chomsky Hierarchy는 언어의 표현력을 나타낸다.사실상 튜링 머신은 존재하지 않고 Regular Language는 프로그래밍 언어를 정의할 때 표현력이 부족해 독립적으로 사용되지 않으니 프로그래밍 언어의 정의는 두 가지로 구분된다. 오토마타는 문자열 s가 L(G) 집합에 포함되는지를 판단한다. Lemail 언어를 집합으로..
[UPL] 함수형 언어 OCaml

[UPL] 함수형 언어 OCaml

2025.03.21
Objective Caml. Caml 언어는 ML family에 속하는 프로그래밍 언어로, 안전한 소프트웨어 개발과 교육 용도로 활용된다. Functional Programming Language - 함수를 일급 객체로 사용해 변수처럼 다룰 수 있다.Strongly Typed Language - 자바처럼 컴파일 시점에 모든 변수와 표현식의 타입이 결정된다.Pattern Matching - Case 구문의 상위 호환으로, 값의 구조에 따라 조건부 분기를 간결하게 구현할 수 있다.Type Inference - 타입 시스템이 변수와 표현식의 타입을 추론해 코드의 가독성을 높인다.Polymorphism - 함수와 데이터 타입이 여러 다른 타입에서도 재사용 할 수 있다. 명시적인 main 함수가 없고, 소스코드를..
  • 최신
    • 1
  • 다음

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (613) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69)
      • Operating System (18)
      • Computer Network (17)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (14)
    • Logs (6) N
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바