이미 하나 이상의 프로그래밍 언어에 익숙 할 수 있습니다. 그러나 자신만의 프로그래밍 언어를 만드는 방법에 대해 생각해 본 적이 있습니까? 내 말은:
프로그래밍 언어는 문자열을 다양한 기계 코드 출력으로 변환하는 일련의 규칙입니다.
요컨대, 프로그래밍 언어는 사전 정의 된 규칙 세트 일뿐입니다. 유용하게하려면 컴파일러 , 통역사 등과 같이 이러한 규칙을 이해할 수있는 것이 필요합니다. 따라서 우리는 단순히 몇 가지 규칙을 정의한 다음, 그 규칙을 작동시키기 위해 기존 프로그래밍 언어를 사용하여 이러한 규칙을 이해할 수있는 프로그램을 작성할 수 있으며, 이는 통역사가됩니다.
컴파일러는 프로세서가 실행할 수있는 컴퓨터 코드 (예 : C 컴파일러)로 코드를 변환합니다.
인터프리터는 프로그램을 한 줄씩 통과하고 각 명령을 실행합니다.
시도하고 싶습니까? 콘솔에서 마젠타 출력을 출력하는 매우 간단한 프로그래밍 언어를 만들어 봅시다. 우리는 그것을 마젠타 라고 부릅니다.
Node.js를 사용 하겠지만 어떤 언어로든 배울 수 있으며 개념은 동일하게 유지됩니다. 먼저 index.js 파일을 만들어 설정하겠습니다.
클래스 마젠타 { 생성자 (코드) { this.codes = 코드; } 달리다() { Console.log (this.codes); } } // 현재 코드를`codes '라는 문자열 변수에 저장합니다. 나중에, 우리는 파일 const codes =`hello world "에서 코드를 읽습니다. "Hello Again"`; Const Magenta = 새로운 마젠타 (코드); magenta.run ();
우리가 여기서하는 일은 Magenta라는 수업을 선언하는 것입니다. 이 클래스는 코드 변수를 통해 제공하는 텍스트를 사용하여 텍스트를 콘솔에 녹음하는 객체를 정의하고 초기화합니다. 현재 파일에 여러 "hello"메시지를 사용하여 코드 변수를 직접 정의했습니다.
자, 이제 우리는 소위 어휘 분석기를 만들어야합니다.
좋아, 먼저 영어에 대해 이야기합시다. 다음 문구를 참조하십시오.
괜찮으세요?
여기서 "hello"는 인사말, "보충 톤이며"You "는 개인 대명사입니다. 마지막에 물음표 ( "?")가 있습니다. 우리는 문장이나 문구를 이와 같은 많은 문법 구성 요소로 나눌 수 있습니다. 우리 가이 부분을 구별하는 또 다른 방법은 그것들을 작은 자국으로 나누는 것입니다. 텍스트를 태그로 나누는 프로그램은 어휘 분석기 입니다.
우리의 언어는 매우 작기 때문에 각각 값이있는 두 가지 유형의 태그 만 있습니다.
정규 표현식을 사용하여 코드 문자열에서 태그를 추출 할 수 있지만 성능은 매우 느립니다. 더 나은 접근 방식은 코드 문자열의 각 문자를 루프하고 태그를 얻는 것입니다. 그래서 마젠타 클래스에서 토큰 화 방법을 만들어 봅시다. 이것은 우리의 어휘 분석기가 될 것입니다.
완전한 코드
`` javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { const length = this.codes.length; // pos 用于跟踪当前位置/索引let pos = 0; let tokens = []; const BUILT_IN_KEYWORDS = ["print"]; // 变量/关键字允许的字符const varChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; while (pos <code>); } } return tokens; } parse(tokens) { const len = tokens.length; let pos = 0; while (pos
Const Codes = print "hello world" print "hello again"
= New Magenta (코드);
### 규칙 및 구문 정의 코드 주문이 규칙 또는 구문과 일치하는지 확인하고 싶습니다. 그러나 먼저 이러한 규칙과 구문이 무엇인지 정의해야합니다. 우리의 언어는 매우 작기 때문에 간단한 구문, 즉 인쇄 키워드와 문자열이 뒤 따릅니다.
키워드 : 인쇄 문자열
<code>因此,让我们创建一个解析方法,该方法循环遍历我们的标记,并查看我们是否形成了有效的语法。如果是这样,它将采取必要的措施。 ```javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { /* tokenizer 的先前代码*/ } parse(tokens) { const len = tokens.length; let pos = 0; while (pos </code>
바라보다! 우리는 이미 작동 언어를 가지고 있습니다!
좋아요,하지만 문자열 변수에 코드를 넣는 것은 그다지 재미 있지 않습니다. 따라서 Magenta 코드를 Code.m라는 파일에 넣으십시오. 이렇게하면 마젠타 코드를 컴파일러 로직과 분리 할 수 있습니다. 파일이 우리 언어로 코드가 포함되어 있음을 나타내는 파일 확장자로 .m을 사용합니다.
이 파일에서 코드를 읽어 보겠습니다.
// 파일 시스템 모듈 가져 오기 const fs = require ( 'fs'); // 경로 연결을 용이하게하기 위해 경로 모듈을 가져옵니다. const path = require ( 'path'); 클래스 마젠타 { 생성자 (코드) { this.codes = 코드; } Tokenize () { /* 토큰 화제에 대한 이전 코드*/ } 구문 분석 (토큰) { /* 이전 구문 분석 방법*/ } 달리다() { /* 이전 실행 방법*/ } } // 코드를 읽습니다 .m 파일 // 일부 텍스트 편집기는 \ r \ n을 \ n 대신 Newline으로 사용하므로 \ r을 삭제합니다. const 코드 = fs .readfilesync (path.join (__ dirname, 'code.m'), 'utf8') .TOSTRING () .replace (/\ r/g, ""); Const Magenta = 새로운 마젠타 (코드); magenta.run ();
이런 식으로, 우리는 처음부터 미니 프로그래밍 언어를 성공적으로 만들었습니다. 프로그래밍 언어는 특정한 것을 완료하는 것만 큼 간단 할 수 있습니다. 물론 여기 Magenta와 같은 언어가 인기있는 프레임 워크의 일부가되기 위해 유용 할 수 있지만 이제는 프로그래밍 언어를 만드는 데 필요한 아이디어가 있습니다.
하늘은 한계입니다. 더 깊이 파고 들으려면 내가 만든 비디오를 따르십시오. 이 비디오에서는 언어에 변수를 추가하는 방법도 보여줍니다.
위 내용은 작은 프로그래밍 언어를 만들어 봅시다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!