2011-09-08 6 views
11

자바 스크립트를 사용하여 스크립팅과 같은 다른 종류의 언어를 지원할 수있는 컴파일러를 작성할 수 있습니까?Javascript로 컴파일러를 작성할 수 있습니까?

자, HTML이 있습니다.

<script language="cpp" id="cppScriptBlock" EntryPoint="main"> 
    int main() { 
     cout << "<h1>CPPHeader</h1>"; 
    } 
</script> 

<script language="java" id="javaScriptBlock" EntryPoint="MyJavaClass"> 
    public class MyJavaClass { 
     public final void main() { 
      java.lang.System.out.println("<h1>JavaHeader</h1>"); 
     } 
    } 
</script> 

<script language="csharp" id="csharpScriptBlock" EntryPoint="MyCSharpClass "> 
    public class MyCSharpClass { 
     public static void Main() { 
      System.Console.WriteLine("<h1>CSharpHeader</h1>"); 
     } 
    } 
</script> 


<script language="javascript"> 
    $("#cppScriptBlock").compileAndRun(); 
    $("#javaScriptBlock").compileAndRun(); 
    $("#csharpScriptBlock").compileAndRun(); 
</script> 

그리고 마지막으로는 다음과 같은 HTML

<h1>CPPHeader</h1> 
<h1>JavaHeader</h1> 
<h1>CSharpHeader</h1> 

이 가능를 생성?

알렉스

+3

예, 가능합니다. 그래도 행운을 빌어. :) –

+4

여기에서 남겨 두겠습니다 : http://bellard.org/jslinux/ –

+1

예를 보려면 https://github.com/gpjt/webgl-lessons/blob/master/example01/index.html을 참조하십시오. WebGL. GLSL (Shading Language) 프로그램은 스크립트 블록으로 작성됩니다. –

답변

0

네, 가능합니다.

그러나 한 언어에서 자바 스크립트로 변환 한 다음 브라우저에서 바이트 코드 생성 및 실행을 처리하는 인터프리터를 작성하는 것이 훨씬 쉽습니다.

7

네,하지만 할 일이 많습니다. 실제 컴파일러와 마찬가지로 코드를 파싱하고 중간 코드로 변환해야합니다. 그런 다음 해당 언어에 포함 된 모든 런타임 라이브러리를 포함하여 환경을 시뮬레이트해야합니다. 즉, 실용적이지는 않지만 가능합니다.

+0

"중간 코드"로 변환하면 중간 코드를 실행하는 데 "자바 가상 머신"이 필요합니다. –

+0

@Alex : 그것이 내가 당신이 할 것이라고 가정 한 것입니다. 대부분의 컴파일러 (많은 통역사들도)는 어느 시점에서 중간 코드를 생성합니다. 출력, 실행 또는 변형 여부가 더 다르지만 대부분의 컴파일러는 중간 코드와 비슷한 것을 생성하는 공통 단계를 갖고 있습니다. – icktoofay

7

예, Javascript는 Turing Complete입니다. 어떤 언어로든 코드를 작성할 수있는 코드를 작성할 수 있습니다. 물론 컴파일러가 포함되어 있습니다. 나는 이것을 할 어떤 이유라도 상상할 수 없다. Javascript에서 컴파일러를 작성하는 데 충분하다면 다른 언어 대신 자바 스크립트로 코드를 작성하는 것이 좋습니다.

+2

당신과 동의하십시오. 실제로, 나는 그것을하지 않을 것입니다. 나는 Javascript로 컴파일러를 만들 가능성에 관심이있다. 아이디어는 프로그래밍 언어 조합을위한 것입니다. –

+3

은 예술가에게 고양이 그림을 그리는 사람의 그림을 그리기에 충분하다면 고양이를 그려야한다고 말하는 것과 같습니다. 예술가가 칠하기를 원한다면, 예술가가 칠하게하십시오. 무엇을 칠할 지 그들에게 말하려고하지 마십시오. – unsynchronized

2

구현 언어로 Javascript를 사용하여 일반적으로 임의의 컴파일러 (및 컴파일러 컴파일러)를 작성하는 방법은 Metacompiler tutorial을 참조하십시오.

16

예, Jison을 사용하면 매우 유용합니다.

사용자가 정의한 언어 구문을 기반으로 JavaScript 파서를 생성합니다.

는 Jison 입력으로 문맥 자유 문법을 얻어 그 문법에 의해 기술 언어를 해석 할 수있는 자바 스크립트 파일을 출력한다. 그러면 은 생성 된 스크립트를 사용하여 입력을 구문 분석하고 을 수락 또는 거부하거나 입력을 기반으로 작업을 수행 할 수 있습니다.

- documentation

PS에서 : CoffeeScript! 이것도 사용하여 만들었습니다. :)

1

예, 가능합니다. 하지만 파서를 직접 작성하는 대신 파서 생성기를 사용하는 것이 좋습니다.

예를 들어 ANTLR by Terence Parr은 a JavaScript target을 가진 매우 강력한 파서 생성기입니다.ECMAScript 5.1을 지원하는 환경에서 작동합니다. (Firefox, Safari, Chrome, Internet Explorer 및 Node.js에서 테스트 됨). 광범위한 문서와 훌륭한 책이있는 오픈 소스 (BSD 라이센스)입니다.

자신 만의 파서를 쓰는 대신 문법을 작성하면 파서가 생성됩니다.

관련 문제