2016-10-09 4 views
1

루아를 ES3 변환기 (브라우저 간 자바 스크립트로 변환하기위한 도구)로 다시 작성했습니다.루아 레이블을 ECMAScript3로 변환하는 솔루션이 있습니까?

goto label; 

:: label :: 
print "skipped"; 

내 첫번째 생각은 예를 들어 부품에 문 각각의 몸을 분리했다 :이 transpiler 내 아이디어를 보내고 시작하기 전에 그것을 예를 들어 ECMAScript를 3으로 루아 레이블을 변환 할 수 있다면, 내가 물어보고 싶은 라벨이 있으면 다음 문장 전체를 다음 부분 전체로 저장해야합니다.

some body 
label (& statements) 
other label (& statements) 

등등. 본문 (또는 프로그램 청크)이있는 모든 명령문은 이와 같은 부분 목록을 가져옵니다. 라벨의 각 부분은 어딘가에 (예 : 자체 부품 오브젝트 내부, 속성 내부에) 저장된 이름을 가져야합니다.

각 부분은 기능이거나 다른 부분과 관련하여 순차적으로 실행될 기능을 저장합니다.

goto 문은 명령문을 실행하고 ES return 문을 호출하여 현재 명령문 실행을 중지하도록 특정 레이블을 조회합니다.

이런 방식으로 본문을 분리하는 데있어 다른 부분에 정의 된 변수와 함수에 액세스하는 것이 좋습니다 ... 이에 대한 아이디어 나 대답이 있습니까? 그것들을 ECMAScript로 변환하는 것이 안정된 라벨을 갖는 것은 불가능합니까?

답변

1

나는 확실히 당신의 생각을 따르지 않을 수 있지만, 누군가가 이미 문제를 해결 보인다 : 자바 스크립트, 더미 while 루프와 결합, continue들, 레이블이 붙은 함수 내에서 goto을 모방 수 있도록 허용합니다. (그리고 내가 뭔가를 잊어 버리지 않는 한, 루아에게 필요한 것은 이것 뿐이다.)

ECMAScript 사양의 72-74 페이지를 비교하십시오. # 3 of 2000-03-24. ES3에서 작동하는지 확인하십시오. this answer to a question about goto in JS. 평소처럼 그물에 언급 된 URL은 죽었지 만, 멋진 인터넷 아카이브에서 summerofgoto.com [archived]을 얻을 수 있습니다. (보내는 GitHub의 링크도 죽은이지만, 스크립트는 아카이브 : parseScripts.js, goto.min.js 또는 goto.js.)

내가 그 일을, 행운을 실행하기가 충분 바랍니다!

+0

레이블을 선언하기 전에 goto를 실행하는 데 한 가지 제한이 있습니다. 그러나이 점이 저에게 도움이됩니다, 감사합니다! – Hydro