문제

나는 XNA에서 게임을 만들고 있으며 내 자신의 스크립팅 언어를 만들려는 생각을하고있었습니다 (매우 간단한 마음). 나는 이것에 대해 더 좋은 방법이 있다는 것을 알고 있지만 (그리고 나는 바퀴를 재창조하고 있다는 것을 알고 있지만, 나는 생산적이고 빠른 것보다 학습 경험을 원합니다.

실행 시간에 코드에 직면 할 때, 내가 이해 한 바에 따르면, 일반적인 접근 방식은 기계 코드 나 바이트 코드 또는 실제로 실행 가능한 다른 것을 구문 분석 한 다음 그것을 실행하는 것입니다. 그러나 예를 들어 Chrome이 처음 나왔을 때 JavaScript 엔진은 JavaScript를 기계 코드로 컴파일하기 때문에 빠르다고 말했습니다. 이는 다른 엔진이 기계 코드로 컴파일되지 않았 음을 의미합니다.

낮은 언어로 컴파일하지 않는 것이 좋으므로 낮은 수준으로 컴파일하지 않고 코드를 구문 분석하고 실행할 수있는 알려진 현대 기술이 있습니까? 아마도 코드를 일종의 나무에 구문 분석하고 나무를 분기하고 각 기호를 비교하고 그 기호를 처리하는 기능을 호출하는 것과 같은 것일 수 있습니다. (어둠 속에서 거친 추측과 찌르기)

도움이 되었습니까?

해결책

나는 개인적으로 자신의 파서 (입력을 토큰으로 돌리는) 또는 Lexer (언어 문법의 입력 토큰 확인)를 굴리지 않을 것입니다. 보세요 antlr 구문 분석/Lexing의 경우 - 훌륭한 프레임 워크이며 장을 파고 싶다면 전체 소스 코드가 있습니다.

구문 분석 한 코드를 실행하려면 간단한 가상 머신을 실행하거나 더 잘 살펴 보는 것입니다. LLVM ISH (Open-Source)는 가상 머신 바이트 코드 형식을 표준화하고 JITING (스크립트 컴파일 바이트 코드를 어셈블리로 바꾸는 것)과 같은 멋진 기능을 제공하려는 시도입니다.

나는 기본 기계 코드 실행과 같이 기계가 기계를 사용하는 고급 옵션에서 당신을 낙담시키지 않지만 이것은 매우 전문적인 영역이며 실질적인 복잡하고 실질적으로 빠르게 얻는다는 점을 명심하십시오!

Earlz는 내 대답이 '이것을 스스로하는 것을 귀찮게하지 않는다는 것을 암시하는 것 같습니다. 내 게시물을 다시 읽는 것은 그런 식으로 들립니다. 내가 ANTLR과 LLVM을 언급 한 이유는 모두 소스 코드와 자습서가 많기 때문에 이것이 좋은 참조 소스라고 생각하기 때문입니다. 기본으로 가져 가서 놀아요

다른 팁

언어를 구축하기위한이 프레임 워크를 시도 할 수 있습니다 (XNA에서 잘 작동합니다).http://www.meta-alternative.net/mbase.html

몇 가지 튜토리얼이 있습니다.http://www.meta-alternative.net/calc.pdf

http://www.meta-alternative.net/pfront.pdf

파이썬은 스크립팅 언어로 훌륭합니다. C API에 대한 C# 바인딩을 만들어 사용하는 것이 좋습니다. 파이썬을 포함시키는 것은 쉽습니다. 응용 프로그램은 Python 통역사가 액세스 할 수있는 모듈 내에서 함수, 유형/클래스 및 변수를 정의 할 수 있습니다. 응용 프로그램은 또한 Python 스크립트에서 함수를 호출하고 결과를 다시 얻을 수 있습니다. 이 두 가지 기능을 결합하면 양방향 통신 체계가 제공됩니다.

기본적으로 Python 구문과 의미론을 무료로 얻습니다. 구현해야 할 것은 응용 프로그램이 Python에 노출되는 API입니다. 예를 들어 게임 로직 함수 및 렌더링 기능에 액세스 할 수 있습니다. 그런 다음 Python 스크립트는이를 호출하는 함수를 정의하고 호스트 응용 프로그램은 Python 함수 (매개 변수 포함)를 호출하여 작업을 완료합니다.

편집 : Ironpython이 더 많은 작업을 구할 수있는 것 같습니다. Cpython의 C# 구현이며 자체 임베딩 API가 있습니다. http://www.ironpython.net/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top