source

자바스크립트로 작성된 C 인터프리터

manysource 2023. 10. 17. 20:22

자바스크립트로 작성된 C 인터프리터

자바스크립트나 자바로 작성된 C 통역기가 있습니까?

완전한 통역사는 필요 없지만 프로그램을 단계적으로 실행하고 변수의 값을 볼 수 있어야 합니다. 스택...웹 인터페이스에 있는 모든 것.

C 초보자들에게 프로그램의 단계별 실행을 보여줌으로써 그들을 돕겠다는 생각입니다.우리는 GWT를 사용하여 인터페이스를 만들고 있기 때문에 자바에 무언가가 있다면 그것을 사용할 수 있을 것입니다.

필요에 맞게 수정할 수 있지만 파서/추상-구문 트리 워커/스택 조작을 피할 수 있다면...그래주시면 좋겠어요.


편집:

확실히 말씀드리지만 일부 프로그램은 정말 까다로울 수 있기 때문에 완전한 C를 시뮬레이션하고 싶지는 않습니다.

단계 I는 표현 평가, 애정 표현, 함수 호출과 같은 기본 연산을 의미합니다.

시뮬레이션할 C에는 변수, 함수, 배열, 포인터, 수학 함수 등이 포함됩니다.안돼요, 문자열 함수, ctype.h, setjmp.h...(적어도 지금은)

http://www.di.ens.fr/ ~fevier/war/simu 프로토타입입니다.

이 예에서는 수동으로 C 코드를 자바스크립트 표현으로 변환하였으나 제한적입니다(예:a == 2 || a = 1처리되지 않음). 수동으로 변환된 프로그램으로 제한됩니다.

우리는 원격 서버에 C 컴파일러를 폐기하여 코드가 정확한지 확인할 수 있습니다(정의되지 않은 동작이 없는지).파싱/AST 구성은 원격으로 수행할 수도 있지만(어떤 언어라도) 클라이언트 측에서 실행하기 위해서는 AST 워킹이 자바스크립트로 되어 있어야 합니다.

java에서 C 파서를 생성하는 데 사용할 수 있는 antlr용 C 문법 있으며 자바스크립트도 사용할 수 있습니다.

LLVM 언어를 JS로 약간의 해킹으로 변환하는 em-scripten이 있으며 C 인터페터를 생성할 수 있습니다.

felixhJSCPP 프로젝트는 자바스크립트로 C++ 인터프리터를 제공합니다.

https://github.com/felixhao28/JSCPP

따라서 예제 프로그램은 다음과 같습니다.

var JSCPP = require('JSCPP');
var launcher = JSCPP.launcher;
var code = 'int main(){int a;cin>>a;cout<<a;return 0;}';
var input = '4321';
var exitcode = launcher.run(code, input);
console.info('program exited with code ' + exitcode);

2015년 3월 현재 이 제품은 활발한 개발이 진행 중이기 때문에 사용이 가능하지만 계속해서 확장될 수 있는 영역이 있습니다.설명서에 제한 사항이 있는지 확인합니다.현재로서는 도서관 지원이 제한된 스트레이트 C 통역기로 더 이상의 문제 없이 사용하실 수 있을 것 같습니다.

자바스크립트로 작성된 C 인터프리터에 대해서는 모르지만, 사용 가능한 C 인터프리터에 대한 논의는 다음과 같습니다.

C의 통역사가 있습니까?

JavaScript 위에서 실행되는 모든 종류의 가상 시스템을 찾은 다음 VM에 대한 적절한 시스템 코드를 내보내는 C 컴파일러를 찾을 수 있는지 확인하는 것이 좋습니다.LLVM이 유력합니다. LLVM을 실행할 수 있는 JavaScript VM을 찾을 수 있다면 매우 좋은 상태가 될 것입니다.

구글 검색을 몇 번 해봤는데 C 코드를 자바스크립트로 바로 번역해주는 엠스크립트를 발견했어요!아마도 이를 통해 무언가를 할 수 있을 것입니다.

https://github.com/kripken/emscripten/wiki

각 컴파일된 C 행 뒤에 "시퀀스 포인트"가 나오도록 Emscripten을 수정한 다음 시뮬레이션 환경을 시퀀스 포인트에서 시퀀스 포인트로 한 단계씩 수행할 수 있습니다.

저는 Emscripten이 LLVM을 구현하고 있다고 생각합니다. 그래서 실제로 가상 레지스터가 있을 수도 있습니다. 그렇다면 사용자의 목적에 이상적일 수도 있습니다.

당신이 C 코드를 지정한 것은 알지만, 당신은 더 간단한 언어의 자바스크립트 에뮬레이션을 고려해 보는 것이 좋을 것입니다.특히 FORTH를 고려해 주시기 바랍니다.

FORTH는 매우 단순한 가상 머신에서 실행됩니다.FORTH에는 두 개의 스택, 즉 데이터 스택과 제어 흐름 스택("복귀" 스택이라고 함)이 있으며 일부 글로벌 메모리도 있습니다.원래 FORTH는 16비트 언어였지만 현재는 32비트 FORTH 구현이 많이 있습니다.

FORTH 코드는 일종의 "기계에 가까운" 코드이기 때문에 작동하는 것을 보면 모든 코드가 어떻게 작동하는지 쉽게 이해할 수 있습니다.저는 C를 배우기 전에 FORTH를 배웠고, 소중한 학습 경험이라고 생각했습니다.

자바스크립트에는 이미 여러 개의 FORTH 인터프리터가 있습니다.FORTH 가상 머신은 매우 간단하기 때문에 구현하는 데 그리 오랜 시간이 걸리지 않습니다.

C-to-FORTH 번역기를 가지고 학생들이 컴파일된 C 코드를 FORTH 가상 머신에서 해석하는 것을 보게 할 수도 있습니다.

저는 이 대답이 당신에게 승산이 없다고 생각하기 때문에 여기서 글을 쓰겠습니다.만약 당신이 실제로 그 아이디어에 관심이 있다면, 아래에 댓글을 달아주시고 더 자세한 내용을 요청하시면 기꺼이 공유해드리겠습니다.FORTH 코드를 작성한 지 오래되었지만 아직도 기억에 남는데 FORTH에 대해 더 많은 이야기를 나눌 수 있으면 좋겠습니다.

편집: 비록 이 답변이 부정적인 점수로 낮게 평가되었지만, 저는 이 답변을 여기에 남겨두겠습니다.교육용 시뮬레이션은 시뮬레이션이 간단하고 이해하기 쉽다면 IMHO가 더 가치가 있습니다.단순한 스택 기반의 FORTH용 가상 머신은 매우 간단하지만 이를 실행하기 위해 C 코드를 컴파일할 수 있습니다. (80년대에는 FORTH 명령어를 기본 머신 코드로 사용하는 CPU 칩도 개발되었습니다.)그리고 말씀드린 것처럼, 저는 완전 초보자일 때 FORT를 직접 공부했고, 조립 언어와 C를 이해하는 데 도움이 되었습니다.

질문을 받은 지 2년이 지난 지금, 그 질문은 받아들여진 대답이 없습니다.로 ï크 페비어가 적절한 자바스크립트 통역사를 찾지 못했을 수도 있습니다.말씀드린 것처럼, FORTH 가상 머신을 위한 여러 자바스크립트 인터프리터가 이미 존재합니다.그러므로 이 대답은 실용적인 것입니다.

C는 번역된 언어가 아닌 컴파일된 언어이며 JS가 완전히 지원하지 않는 포인터와 같은 기능을 가지고 있기 때문에 자바스크립트에서 C를 해석하는 것은 말이 되지 않습니다.

네, 있습니다. (실제로 TypeScript로 작성되지만 Type은 생략 가능) : https://github.com/Mati365/ts-c-compiler

이것은 C 코드를 x86 16bit 부트 바이너리에 컴파일합니다.

언급URL : https://stackoverflow.com/questions/6142193/c-interpreter-written-in-javascript