Concept Of Programing
Language
구문과 의미론
구문 기술의 일반적인 문제
• 언어의 구문 규칙은 언어의 알파벳으로부터 구성된 문자열들이 그 언어에 속하는지의 여부
• 어휘항목(lexeme) : 가장 낮은 수준의 구문 단위
• 수치 리터럴 (Numeric literal)
• 연산자 (Operator)
• 특수어 (Special word)
• 등등
• 어휘항목의 여러가지 그룹
• 식별자 (identifier) : 변수, 메소드, 클래스등의 이름
• 토큰 (token) : 어휘항목들에 대한 한 부류
• 예 : index = 2 * count + 17;
• 프로그램은 문자보다는 어휘항목들로 구성된 문자열들이라고 생각될 수 있다.
Backus-Naur 형식과 문맥-자유 문법
• 프로그래밍 언어에 속한 토큰들의 형태는 정규 문법으로 기술될 수 있
음
• 전채 프로그램 언어의 구문은 몇 가지 사항만 제외하면 문맥-자유 문법
으로 기술될 수 있음.
• Backus-Naur 형식의 기원
• 배커스-나우르 표기법(Backus–Naur form), 약칭 BNF는 문맥 무관 문법을 나타
내기 위해 만들어진 표기법이다. - 위키백과
• 1959년 국제 학술회의에서 John Backus에 의해 발표됨
• 1960년 Peter Naur에 의해 약간의 수정이 이루어짐
• Backus-Naur 형식 또는 BNF라고 불림
• BNF는 문맥 자유 문법이라 불림
기본 원리
• 메타 언어 : 다른 언어를 기술하는데 사용되는 언어
• BNF도 메타언어
• BNF는 구문 구조에 대해서 추상화를 사용한다.
• LHS(left-hand side) : 정의되고 있는 추상화
• RHS(right-hand side) : LHS의 정의,
토큰, 어휘 항목, 다른 추상화에 대한 참조로 구성
• 위의 정의를 규칙(rule) 또는 생성(production)이라고 부른다.
• 논 터미널 기호(non-terminal symbol) : 추상화
• 터미널 기호(terminal) : 규칙에 포함된 어휘 항목과 토큰
• BNF기술 또는 문법은 규칙들의 모임이다.
• 논 터미널 기호는 두 개 이상의 다른 정의를 가질 수 있음.
• OR (|)기호를 통해 구분됨
• 예) 단순 JAVA 배정문
• <assign>-><var>=<expression>
• 예) 위 예베의 규칙은 아래와 같이 나뉨
• 추상화 <var>의 사례
• 어휘항목 =
• <expression>의 사례
• 예) 변경전
• <if_stmt> -> if (<logic_expr>) <stmt>
• <if_stmt> -> if (<logic_expr>) <stmt> else <stmt>
• 예) 변경후
• <if_stmt> -> if (<logic_expr)>) <stmt>
| if (<logic_expr>) <stmt> else <stmt>
리스트 명세
• 수학에서는 가변 길이 리스트를 생략기호(…)를 통해 나타내지만,
BNF는 생략기호를 포함하지 않음
• 따라서 BNF는 재귀(recursive)를 이용해서 리스트를 나타냄
• LHS가 RHS 상에 나타나면 그 규칙은 재귀적이라고 함
• 예)
• <ident_list> -> identifier
| identifier, <ident_list>

Lightning talk - 5

  • 1.
  • 2.
    구문 기술의 일반적인문제 • 언어의 구문 규칙은 언어의 알파벳으로부터 구성된 문자열들이 그 언어에 속하는지의 여부 • 어휘항목(lexeme) : 가장 낮은 수준의 구문 단위 • 수치 리터럴 (Numeric literal) • 연산자 (Operator) • 특수어 (Special word) • 등등 • 어휘항목의 여러가지 그룹 • 식별자 (identifier) : 변수, 메소드, 클래스등의 이름 • 토큰 (token) : 어휘항목들에 대한 한 부류 • 예 : index = 2 * count + 17; • 프로그램은 문자보다는 어휘항목들로 구성된 문자열들이라고 생각될 수 있다.
  • 3.
    Backus-Naur 형식과 문맥-자유문법 • 프로그래밍 언어에 속한 토큰들의 형태는 정규 문법으로 기술될 수 있 음 • 전채 프로그램 언어의 구문은 몇 가지 사항만 제외하면 문맥-자유 문법 으로 기술될 수 있음. • Backus-Naur 형식의 기원 • 배커스-나우르 표기법(Backus–Naur form), 약칭 BNF는 문맥 무관 문법을 나타 내기 위해 만들어진 표기법이다. - 위키백과 • 1959년 국제 학술회의에서 John Backus에 의해 발표됨 • 1960년 Peter Naur에 의해 약간의 수정이 이루어짐 • Backus-Naur 형식 또는 BNF라고 불림 • BNF는 문맥 자유 문법이라 불림
  • 4.
    기본 원리 • 메타언어 : 다른 언어를 기술하는데 사용되는 언어 • BNF도 메타언어 • BNF는 구문 구조에 대해서 추상화를 사용한다. • LHS(left-hand side) : 정의되고 있는 추상화 • RHS(right-hand side) : LHS의 정의, 토큰, 어휘 항목, 다른 추상화에 대한 참조로 구성 • 위의 정의를 규칙(rule) 또는 생성(production)이라고 부른다. • 논 터미널 기호(non-terminal symbol) : 추상화 • 터미널 기호(terminal) : 규칙에 포함된 어휘 항목과 토큰 • BNF기술 또는 문법은 규칙들의 모임이다. • 논 터미널 기호는 두 개 이상의 다른 정의를 가질 수 있음. • OR (|)기호를 통해 구분됨 • 예) 단순 JAVA 배정문 • <assign>-><var>=<expression> • 예) 위 예베의 규칙은 아래와 같이 나뉨 • 추상화 <var>의 사례 • 어휘항목 = • <expression>의 사례 • 예) 변경전 • <if_stmt> -> if (<logic_expr>) <stmt> • <if_stmt> -> if (<logic_expr>) <stmt> else <stmt> • 예) 변경후 • <if_stmt> -> if (<logic_expr)>) <stmt> | if (<logic_expr>) <stmt> else <stmt>
  • 5.
    리스트 명세 • 수학에서는가변 길이 리스트를 생략기호(…)를 통해 나타내지만, BNF는 생략기호를 포함하지 않음 • 따라서 BNF는 재귀(recursive)를 이용해서 리스트를 나타냄 • LHS가 RHS 상에 나타나면 그 규칙은 재귀적이라고 함 • 예) • <ident_list> -> identifier | identifier, <ident_list>

Editor's Notes

  • #4 https://ko.wikipedia.org/wiki/%EB%B0%B0%EC%BB%A4%EC%8A%A4-%EB%82%98%EC%9A%B0%EB%A5%B4_%ED%91%9C%EA%B8%B0%EB%B2%95