본문 바로가기

프로그래밍언어론31

[프로그래밍언어론] 11. 이름(Name), 바인딩(Binding) 이름(Name)이란? 이름(Name) 이름은 단지 다른 객체를 대표(represent)하는(또는 의미(denote)하는) 일련의 문자일 뿐이다. 대부분의 프로그래밍 언어에서 이름은 식별자 형식을 갖는다. 예) 영숫자 토큰(v1, v2, func 등) 또는 기타 기호(_, $). 이름(Names) ≠ 개체(object) 이름과 그 이름으로 표시되는 대상은 동일한 것이 아니다. 하나의 이름은 여러 가지 다른 개체를 나타낼 수 있다. 또한 하나의 개체가 여러 가지 다른 이름을 가질 수 있다. 표시 가능한 객체(Denotable Objects) 표시 가능한 개체는 이름을 지정할 수 있는 개체이다. 사용자가 이름을 부여한 객체: 변수(variables), 매개변수(parameters), 함수(functions),.. 2023. 10. 10.
[프로그래밍언어론] 10. 추상 구문 트리(AST)를 EBNF로 변환 구문을 파이썬으로 추상 구문 트리(Abstract Syntax Tree; AST)로 분석하고 EBNF로 구현해본다. 'a = 3 + b' 구문을 분석해보자. 파이썬에서는 ast 모듈을 사용하여 코드를 구문 분석할 수 있다. ast 모듈의 사용법은 다음과 같다. import ast t = ast.parse('a = 3 + b') s = ast.dump(t, annotate_fields=False, indent=4) print(s) 코드 결과 Module([ Assign([ Name('a', Store())], BinOp( Constant(3), Add(), Name('b', Load()) ) ) ],[]) 결과 각 노드에 대해 노드 유형(Module, Assign, Name)으로 시작하고 해당 하위 노드를.. 2023. 10. 10.
[프로그래밍언어론] 9. BNF를 EBNF로 변환 변환 방법 BNF EBNF ::= A | AB ::= A [B] ::= '-' | ::= ['-'] ::= {X} A | A ::= A {A} ::= {X} A | ε ::= {A} ::= '+' | '-' ::= ('+' | '-') ::= '+' | '-' | ::= [('+' | '-')] EBNF로 변환할 때 주의점 대부분의 |는 제거된다. 중복되는 요소가 하는 일이 오직 조건을 구체화하는 것이라면, 그것들은 제거된다. 대부분의 재귀적 요소는 제거되고 { } 루프로 대체된다. null을 뜻하는 입실론(ε)이 없어진다. 변환 예시 BNF 표현 ::= int ; ::= | , EBNF 표현 ::= int { , } ; 참고 https://en.wikipedia.org/wiki/Syntax_diagra.. 2023. 9. 19.
[프로그래밍언어론] 8. BNF, EBNF 우리가 어떻게 프로그램언어(PL)에 대한 옳고 그름을 판단할 수 있을까? 또한 코드가 올바르게 작성되었는지 판단할 수 있는 기준은 뭘까? 우리는 주어진 코드에 구문 오류가 있는지 확인하면 된다. 형식 언어(Formal Language) 프로그래밍 언어의 일반적인 특성을 추상화 일련의 기호, 일부 형성 규칙(기호를 결합)으로 구성 언어 문법 E → E + E | E * E | N, N → 0N | 1N | λ 배커스-나우르 표기법(BNF) 원래는 John Backus가 개발한 Backus Normal Form Peter Naur가 확장하여 사용한 후 Donald Knuth의 제안으로 Backus-Naur Form(BNF)으로 이름 변경 문맥 자유 문법(context-free grammars)을 위한 표기법.. 2023. 9. 19.
[프로그래밍언어론] 7. Syntax vs. Semantics vs. Pragmatics 언어의 구문을 정의하는 방법에 들어가기에 앞서 구문, 의미론, 화용론의 정의를 반드시 알아야한다. 구문(Syntax), 의미론(Semantics), 화용론(Pragmatics) 구문(Syntax) : 프로그램의 형태 의미론(Semantics) : 프로그램의 의미 화용론(Pragmatics) : 특정 상황에서 프로그램의 의미 다음 예시를 보자 A mouse is kicking a cat. 해당 문장은 문법적으로 전혀 문제가 없다. 정상적인 구문이라고 할 수 있다. mouse a cat is a kicking. 그러나 이 문장은 문법으로 옳지 않다. 올바르지 않은 구문이다. 이렇듯 구문(Syntax)은 프로그램의 형태가 올바른 문법으로 작성되어 타당성의 여부가 판단된다. A mouse is kicking a.. 2023. 9. 19.