기본 언어의 기본 기능은 무엇입니까? DSL 제안?


9

마침내 인터프리터와 컴파일러를 만드는 데 따른 복잡성을 이해하기 시작했습니다. 나는 TinyBasic, 1964 (Dartmouth) Basic의 여러 버전을 구축 했으며이 시점에 도달하기 전에 해당 언어로 확장했습니다. 가장 최근의 프로젝트는 사람들이 관심을 가질만한 언어의 다른 기능을 생각할 수 없기 때문에 Open Source Basic이라고 부릅니다. 언어의 원천을 열고 복잡한 작업 수행 방법 (스캔, 구문 분석, 해석 및 컴파일 수행 방법)을 이해할 수 있습니다.

Open Source Basic은 먼저 스택 기반 언어로 해석됩니다. 그런 다음 해당 스택 기반 언어가 해석되고 즉시 실행되거나 CLR 실행 파일로 바뀝니다.

내 질문은 모두 이것으로 요약됩니다.

  • 기본 기반 언어의 기본 기능 / 구성은 무엇입니까? 할당, 표현식, 변수, 일부 함수 (랜덤, ToUpper, ToLower), 루핑 (for and dowhile / until), If (블록 및 한 줄) 기타 결정, 콘솔 기반 입력 (입력) ) 및 출력 (인쇄) 및 서브 루틴 (아직 매개 변수 없음).
  • 언어에 기본 구문을 '완료'할 때 어떻게 분기해야합니까? 어떤 도메인으로? 다시 말해, 모든 일반적인 구조가 작동하면 오픈 소스 기본 언어는 어떤 방향을 취해야합니까?

시간 내 주셔서 감사합니다,

도미니크


3
저는 항상 구문 지원 AOP 기능이 내장 된 언어를 원했습니다.
FrustratedWithFormsDesigner

@Dominick : LINQ 기능은 어떻습니까?
프레데터

@Frustrated ... AOP-Aspect 지향 프로그래밍 기능? 예를 들어 주시겠습니까?
Dominick 2016 년

5
기본 명령 기능에서 도메인 특정 언어를 발명하지 마십시오. 먼저 도메인을 공식화하고이 지식을 언어로 바꾸고 필요한 경우 기본 기능 만 추가하십시오. 아마도 튜링이 완전하지 않은 완벽한 DSL을 만들었을 것입니다. DSL의 최고의 속성 중 하나입니다.
SK-logic

1
확실히 "고토"는 기본의 필수 기능입니까?
Perry

답변:


1

Commodore [Vic-20, C-64]에서 초기 BASIC에 대한 나의 경험은 줄 번호가 BASIC의 핵심 "기능"이라는 인상을주었습니다. BASIC에 대한 나의 주요 견해가 다른 언어로 도약 할 수있는 학습 언어이기 때문에 더 이상 현대적인 구현에 사용되지 않는 것 같습니다.


1

분명히 고귀한 노력이지만 우선 순위를 바꾸 었다고 생각합니다.

첫 번째 관심사는 언어가 목표로하는 "도메인"문제입니다. 이것이 처음에 "도메인 특정 언어"라고하는 이유입니다. DSL은 버터를 통한 나이프와 같은 특정 문제를 해결하기 위해 작고 단순하며 매우 좁게 집중된 경우에만 허용됩니다 .

도메인과 도메인에서 언어가 작동하는 방식을 식별 한 후 특정 구성 또는 기능을 배치 할 수 있습니다.

마지막으로, 내부 또는 외부 DSL 을 원하는지 고려하는 것이 도움이 될 수 있습니다 .


0

CAE / FEA 응용 프로그램을위한 스크립팅 언어를 개발하고 있으며 최종 사용자에게 유용한 일부 기능은 다음과 같습니다. 당신이 언급 한 기능은 시작하기에 매우 강력한 언어를 만들어야합니다. 그런 다음 사용자 요청에 따라 개발합니다.


흥미롭고 도메인 고유의 언어입니다 (Computer Aided Engineering / Finite Element Analysis). 왜 행렬이 필요한지 알 수 있습니다. 당신의 모든 제안은 꽤 좋은 것입니다 그리고 나는 그들을 명심할 것입니다. 감사.
Dominick 2016 년

0

이미 존재하는 경우 추가하거나 확장 할 수있는 몇 가지 기능이 있지만 ...

... 기본적인 프로그래밍 언어는 스크립트 언어와 매우 유사하며 나중에 누락되거나 포함 된 기능은 네임 스페이스 또는 모듈이었습니다.

C, C ++, PHP, Visual Basic은 모듈 / 네임 스페이스없이 시작했으며 나중에 추가 될 예정입니다.

다음은 서브 루틴 (값을 반환하지 않는 프로 시저 또는 함수)과 함수 (특수 값을 반환하는 서브 루틴) 일 수 있습니다.


0

복잡한 작업 수행 방법 이해 (스캔, 구문 분석, 해석 및 컴파일 수행 방법)

컴파일러를 이해하기위한 리소스에 대한 스택 오버플로 사이트 에는 좋은 질문 이 있습니다 . 내 컴파일러 클래스 페이지를 볼 수도 있습니다 .

기본 구문을 언어에 '완료'할 때 어떻게 분기해야합니까?

이미 구축 한 기능을 고려할 때 int, string, boolean의 세 가지 데이터 유형을 추가하는 것이 좋습니다. 각각 이전보다 조금 더 세 가지 작업을 수행해야합니다.

  1. 핵심 단어를 구문 분석 할 수 있도록 문법을 수정하십시오. 테스트.
  2. 변수 이름 및 기타 특성과 함께 데이터 유형을 포함 할 수 있도록 기호 테이블을 작성하거나 기존 기호 테이블에 추가하십시오. 그런 다음이를 테스트하고 기호 테이블을 볼 수 있도록 디버그 스위치를 만드십시오.
  3. MsIL에 코드를 생성하기 전에 또는 해석 중에 호환 가능한 유형을 확인하십시오. 모든 유형에 대해 각 실행 모드에서 오류 및 비 오류 사례를 모두 테스트하십시오.

그것이 잘된다면 범위에서 작업하는 것이 좋습니다 (서브 루틴에서 전역 대 전역). 그것에 대한 조언이 필요하면 알려주십시오.

행운을 빕니다. 그리고 즐기세요!

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