스크립팅 언어 만들기에 대한 질문


12

예를 들어, 프로그래밍 언어 나 스크립팅 언어를 만들 사람에게 돈을 지불하고 싶다고 가정 해 보겠습니다. 내가 원하는 것이 무엇인지 완전히 이해하려면 어떤 종류의 문서가 필요할까요?

새로운 프로그래밍 / 스크립트 언어를 설명하는 표준 문서가 있습니까?


이것은 프로그래머가 아닌 프로그래밍에 관한 것이므로 아마도 StackOverflow에 더 적합 할 것입니다.
Muad'Dib

14
Muad'Dib에 동의하지 않습니다. 나는 이것이이 질문에 좋은 장소라고 생각합니다.
Chris

5
나는 당신 자신의 스크립트 언어를 발명하기보다는 당신을 위해 엄청난 양의 작업 비용을 지불해야하고 사용자는 새로운 언어를 배워야한다고 생각합니다. 기존의 스크립트 언어를 더 잘 포함시킬 것입니다. Python, Javascript / ECMAScript와 같은 일부 언어는 더 큰 프레임 워크에 임베드 될 수 있도록 설계되었습니다. 요컨대, API를 디자인하고 스크립트 인터프리터를 자신의 프로그램에 포함시키는 방법 만 알아 내면됩니다.
Lie Ryan

1
언어가 DSL 인 경우이 작업을 수행하면 이점이 있습니다. 일반적인 언어는 그리 많지 않습니다. 물론 일부 일반 언어는 Lisp 또는 TCL
jk

답변:


16

작성해야하는 것을 언어 사양 이라고합니다 .

언어 문법 ( 확장 된 Backus-Naur-Form )과 그 의미에 대한 설명을 포함해야합니다 .

후자의 경우 자신의 말로 설명을 작성하거나 (정확하게주의를 기울여) 공식적인 의미론 을 작성할 수 있습니다 .


1
BNF는 내용이없는 문법에만 유용합니다. 스크립팅 언어는 항상 문맥이없는 것은 아닙니다 (예 : TCL) (여전히 문맥 자유 언어를 사용하는 것이 좋습니다)
jk.

@jk. BNF가 컨텍스트가없는 언어에는 전혀 쓸모가 없다고 말할 수 없습니다. 비 문맥이없는 구문에 따라, EBNF에서 구문을 지정하고 단어의 모호성을 해결하는 것이 여전히 타당 할 수 있습니다. 그것이 C ++ 표준이하는 일입니다. 대부분의 경우 단어로 모든 것을 설명하거나 문맥에 맞거나 제한되지 않은 문법을 사용하여 지정하는 것보다 여전히 명확하다고 생각합니다.
sepp2k

사실, 내 지점이었다 더 타락한 구문이 있고 BNF가 거의 알려줍니다 등 혀짤배기, TCL 또는 같은 언어 (실제로에서 DSL을 정의를위한 아주 좋은이)있다
JK는.

@jk. 그러나 구문을 설명하는 다른 방법은 말할 것도 거의 없기 때문에 똑같이 거의 말할 수 없습니다. 이는 사양의 구문 부분이 매우 짧다는 것을 의미합니다.
sepp2k

13

다음이 필요합니다.

  • 새로운 언어를 만드는 이유
  • 철학
  • 의미 론적 정의
  • 토큰에 대한 어휘 설명
  • 구문 분석 정의

언어가 어떻게 다릅니 까? 그것의 임무는 무엇입니까? 기능적입니까? 객체 지향입니까? 메타 언어입니까? 독특한 기능은 무엇입니까? 존재하지 않는 (또는 못생긴 방식으로) 존재하는 세상에 무엇을 줄 것입니까? 어떻게 바꾸고 싶습니까? 컴파일되거나 해석됩니까? DSL 또는 범용 언어? 이것은 당신의 철학 이며 언어 디자인에 대해 많은 것을 지시합니다.

그런 다음 종이에 거친 구문과 의미를 긁어 내십시오. 이것은 의미 론적 정의 가 될 것입니다 ... 가짜 코드를 작성하는 것은 당신의 생각을 발전시키는 좋은 방법입니다. 이를 수행하는 방법에 대한 훌륭한 예를 보려면 "C 프로그래밍 언어"를 읽으십시오. 그것으로 놀아 라.

그런 다음 어떤 방식으로 토큰과 구문을 정의해야합니다. 그런 다음 프로그램은이를 문자열로 읽고 구문을 처리 할 수있는 오토마타로 처리합니다. Yacc와 Bison은 각각 어휘 및 구문 분석에 정규식과 BNF 스타일 구문을 사용합니다. Yacc 및 Bison과 같은 다른 언어 도구도 있습니다.

또한 하지 말아야 할 것을 알기 위해서는 언어 이론 / 컴파일러기초 가 필요합니다 . 모호한 문법, AST 생성 및 조작 문제, 일반적으로 자신을 위해 인생을 단순하게 만드는 방법을 예로들 수 있습니다. 이론을 아는 것이 매우 중요합니다. 다음을 시작하는 것이 좋습니다.

컴파일러 : 원리, 기법 및 도구 (드래곤 북)
C에서 현대 컴파일러 구현 또는 Java에서 현대 컴파일러 구현


1
철학 +1, DSL의 경우 도메인을 명확하게 식별하고 싶습니다
jk.

8

새 언어를 만드는 시간의 99.9 %가 완전히 필요하지 않습니다. 투자 수익률은 매우 작을 것이므로 시간을 낭비했을 것입니다.

Javascript를 사용하기 쉬운 스크립팅 언어로 사용할 수 있으며 대부분의 언어에서 이미 사용 가능한 파서가 있습니다. 적합한 파서를 찾을 수 있으면 원하는 다른 스크립팅 언어를 사용할 수도 있습니다. 그것들을 프로그램에 구현하면 훨씬 적은 작업이 필요하고 더 큰 수익을 올릴 수 있습니다. 사람들은 다른 언어를 배울 필요가 없으며 API 만 배우면됩니다. 훨씬 더 나은 솔루션입니다.

새로운 언어를 만드는 것은 거의 항상 나쁜 일입니다.


9
그것이 나쁘지 않은 많은 시간을 제외하고. 간단한 DSL을 만드는 것이 매우 유용 할 수 있습니다. 이제 자신의 범용 언어를 만드는 것이 답변의 내용과 더 일치합니다.
ChaosPandion

@ChaosPandion 그러나 많은 언어는 이미 그 언어의 코드를 사용하는 DSL을 만드는 데 뛰어납니다 (즉 루비가 좋습니다)
대안

2
귀하의 답변에 동의하지만이 질문에 대한 정답이 아니라고 생각합니다. 나는 asker가 스크립트 언어를 만드는 장단점이 아닌 스크립팅 언어를 만드는 일반적인 사항을보고 있다고 생각합니다.
Tim Murphy

새로운 언어를 만드는 것이 거의 항상 최상의 솔루션입니다. en.wikipedia.org/wiki/ 언어 지향
SK-logic

3

BNF 로 언어 문법을 설명 할 수 있습니다 .

예를 들어, 이것은 Python의 문법 입니다.


6
문법 자체만으로는 언어를 구현하기에 충분한 정보가 아닙니다. 또한 의미를 한 가지 방법으로 지정해야합니다.
sepp2k

0

.NET을 사용하는 경우 시간이 지남에 따라 우연히 발견되었습니다. 나는 단지 호기심을 보여 주었지만 아마도 당신에게 유용 할 것입니다 : irony .

Irony는 .NET 플랫폼에서 언어를 구현하기위한 개발 키트입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.