판암의 제작 [두 번째 부분]
4852 단어 slatecomputersciencetutorial
프로그래밍 언어 제작: 슬레이트[제1부분]
메건 (그녀)・ 2018년 7월 10일・ 5분 읽기
#webassembly
#slate
#slatedev
#computerscience
와!확실히 큰 변화가 생겼다.이것은 아직 단계에 있고 컴파일러와 언어를 배우는 연습일 뿐이지만 체계 구조는 여러 방면에서 이미 완전히 바뀌었다.
원본 텍스트를 가져와 코드로 변환하는 과정은 어느 정도 내가 이전 글에서 기술한 과정과 같지만, 내가 사용하고 있는 창고와 그것을 가져오는 방법은 완전히 다르다.
우선, 이 생각에 앞서 주로 JS/TS를 기반으로 한 다음에 WebAssembly1로 직접 컴파일할 것이다.그러나 내가 마지막 글을 쓸 때 Wasm의 기능이 현저히 부족하기 때문에 그 상태에서 완전한 언어를 개발하는 것은 최선의 선택이 아니다.이 밖에 Wasm의 ISA2는 창고기를 바탕으로 출력 텍스트가 전형적인 어셈블리 코드와 판이하게 다르다.
현재, 슬레이트는 데스크톱에서 실행되고 있지만, 나는 여전히 스크립트 영역을 깊이 기억한다.현재 LLVM3 컴파일러 백엔드를 사용하고 있으며, 이 백엔드는 사용자 정의 IR4 텍스트 형식으로 위조 프로그램 집합과 유사하며, 이를 시스템의 실제 기계 코드와 바이너리 형식5으로 변환합니다.그리고 이 출력을 실제 프로그램으로 실행할 수 있습니다.
또한 이 프로그램은 Go6로 작성되었으나 최종 목표는 7 자체8를 컴파일할 수 있도록 하는 것이다.
렉신
이것은 이전과 마찬가지로 여기에서 관련 코드를 찾을 수 있다. https://github.com/nektro/slate/blob/master/pgk/slate/lexer.go
이 과정은 추상적으로 나타나고 실제 어법 분석은 다른supporter 패키지에서 이루어진다.이 단계의 언어는 키워드 목록, 유효한 기호 목록, 문자열에 사용할 문자만 제공합니다.그리고
lex
패키지는 이 정보를 얻고 슬레이트 파일의 원본 텍스트를 읽으며 유효하면 영패 그룹으로 돌아갑니다.이 단계는 불법 문자나 단어 등 간단한 오류를 초래할 것이다.
분석 중
이 단계는 구조적으로 이전과 완전히 다르다. 여기서 원본 코드를 찾을 수 있다. https://github.com/nektro/slate/blob/master/pgk/slate/parser.go
이 단계가 거대한 투쟁의 원천이라는 것을 깨닫고 상당 시간 동안 이 프로젝트의 작업을 멈추려고 했다.그러나 어느 날, 나는 Andrew Kelley가 창작한 시냇물을 보고 있었다. 이것은 기묘한 Zig 언어의 창조자이다.
내가 볼 때 얻은 좋은 소식은 네가 문법을 이용하여 해석기를 만들 수 있다는 것이다. 아주 멋진 특성을 무료로 얻을 수 있다는 것이다.예를 들어 영어에서 만약 당신이 하나
q
를 가지고 있다면, 당신은 실제로 뒤에 하나u
가 있을 것이라고 보장할 수 있다.프로그래밍 언어 해석에서도 이 점을 활용할 수 있습니다.만약 당신이 if
키워드를 만났다면 뒤에 (
키워드가 하나 있을 것이다. 왜냐하면 이것이 바로 당신이 언어를 정의하는 방식이기 때문이다.따라서 해상도에서 인코딩을 할 수 있습니다. 만약 그것을 보지 못하면 매우 좋은 오류가 발생할 수 있습니다.녹슨 오류와 유사하다
error: in if statement, expected `(` saw `pub`
--> src/main.slate:11:5
|
11 | if pub {
| ^^^
번역하다
만약 해상도가 이미 그 작업을 완성하고 오류가 발생하지 않았다면, 우리는 지금 AST6 대상을 가지고 있는데, 이것은 우리가 사용할 수 있는 전체 프로그램을 대표한다.
다른 Helper 패키지를 사용하면 이 AST 대상이 LLVM IR 텍스트로 출력되고 LLVM에 전달되어 프로그램을 생성할 수 있습니다.
지금 우리 처지.
컴파일할 수 있는 기본 프로그램은 다음과 같습니다. https://github.com/nektro/slate/blob/master/tests/basics/01.slate
LLVM 출력은 다음과 같습니다. https://gist.github.com/nektro/a61777bbcb818d99dddf579b031e9798
앞으로
이것이 얼마나 실험적인지 감안하면, 나는 정말 언어에 대한 나의 생각을 시험해 보고, 그것이 어디로 향할지 보고 싶다.만약 성공한다면 다행이다!나는 아주 멋진 것을 만들었다.만약 없다면, 나는 여전히 많은 것을 배웠다.
나는 문법 변경과 익숙한 언어로 업그레이드에 대해 약간의 생각을 가지고 있다.나는 최근에 유행하는 언어보다 더 실용적인 방법을 채택하려고 한다. 나는 귀속과 더 많은 유형의 검사를 추가해야 한다.
이 프로젝트는 지금까지의 모든 원본 코드와 문서, 그리고 나의 소셜 미디어에 대한 링크와 나를 지원하는 방법을 포함한다https://github.com/nektro/slate.
Reference
이 문제에 관하여(판암의 제작 [두 번째 부분]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nektro/the-making-of-slate-part-2-30ll텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)