2010-02-02 1 views
1

에 쉽게 이식하는 방법은 루아 코드를 C#으로 변환하는 쉬운 방법일까요?Lua 코드를 C#

가장 큰 문제는 아마도 일부 사전에서 테이블을 깔끔하게 포트하는 것입니다.

오해 방지를 위해 : 아니요 내 프로그램에 내장 된 루아를 사용할 수 없습니다..

+0

당신은 "임베디드 루아"무엇을 의미합니까? Lua2IL을 "임베디드 루아"로 간주합니까? Is는 네이티브 구현 AFAIK를 사용하거나 참조하지 않지만 일반 IL을 생성하므로 컴팩트 프레임 워크와 다른 플랫폼에서도 작동 할 수 있습니다. – Lucero

+0

Lua를 사용할 수 없다는 의미입니다. 그러나 아이디어를 주셔서 감사합니다. 저는 다른 시간에 Lua2IL을 사용할 것입니다. – mnn

답변

2

루아와 같이 매우 역동적 인 언어로 설계된 코드는 C#과 같은 정적 언어로 이해하기 위해 상당한 리팩토링이 필요합니다. 두 언어는 근본적으로 다른 용도로 사용됩니다. 기본적인 수치/문자열 연산과 같은 모든 언어의 가장 기본적인 기능 만 사용하지 않는 한 이러한 코드를 처음부터 다시 작성해야합니다.

1

쉬운 방법은 없습니다.

0

달성하고자하는 것은 무엇입니까? 루아 파일을 C# 코드로 변환하십시오. 코드를 광범위하게 사용하거나 원래 코드와 비슷한 코드를 원할 수도 있습니다.

첫 번째 유형의 변환에 대한 대답은 매우 어렵지만 불가능하지 않다는 것입니다. 코드를 파싱하고 C#에서 동일한 (동적) 기능을 다시 만들어야합니다. LinFu.Reflection과 같은 프레임 워크는 CLR에 동적 기능을 추가하기 때문에 여기에서 도움이 될 수 있습니다.

제 생각에는 원래 코드 대신 lua 바이트 코드를 C#으로 변환하는 것이 좋습니다. 루아는 많은 opcode를 가지고 있지 않기 때문에 (너무 정확하게 기억한다면 약 30 개), 이것은 너무 어려워서는 안된다. 이 opcode에서 가장 어려운 변환은 논리 연산자와 점프 연산자입니다 (C#에서는 goto가 없으므로). 그러나 흐름 연산자를 그대로 유지하고 C#으로 변환하면 (즉, 다소 성취 가능함) 그 사이에 코드를 컴파일하고 결과 바이트 코드를 C#으로 변환해야합니다. 물론이 방법을 사용하면 원본 코드의 가독성으로 인해 많은 부분을 잃을 것이며 유지 관리가 훨씬 더 어려워 질 것입니다.

여기에 설명 된 두 가지 경계 사례 사이의 해결책을 찾으려고 할 수도 있습니다. 일부 구조는 쉽게 포팅 될 수 있지만 (주로 루프 및 단순한 산술 연산자), 테이블 처리를위한 opcode 표현으로 대체됩니다.

+0

C#에는 goto가 있습니다. http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx –

0

Universal-transpiler은 Lua의 작은 하위 집합을 C#을 비롯한 여러 다른 언어로 번역 할 수 있습니다. 이 SWI-Prolog에 작성된 예를,이다 :

:- use_module(library(transpiler)). 
:- set_prolog_flag(double_quotes,chars). 
:- initialization(main). 

main :- 
    translate("function add(a,b) return a + b end function squared(a) return a*a end function add_exclamation_point(parameter) return parameter .. \"!\" end",'lua','c#',X), 
    atom_chars(Y,X), 
    writeln(Y). 

이것은 그것을 생성하는 C# 소스 코드 :

public static int add(int a,int b){ 
     return a+b; 
} 
public static int squared(int a){ 
     return a*a; 
} 
public static string add_exclamation_point(string parameter){ 
     return parameter+"!"; 
}