2014-05-12 6 views
0

PEG.js가있는 C++ 파서를 만들고 있는데 cin을 사용할 수 있어야합니다. 경기 후 JS에서 prompt()을 사용하면 online version은 'Parse Error : prompt is not defined'오류를 throw합니다. prompt을 복제하는 함수를 만들기 위해 이니셜 라이저를 사용하려고합니다. (아마도 최적화되지 않았을뿐입니다. 그러나, 내가 이것을 할 때, 그것은 여전히 ​​나에게 오류를 준다. 나는 window.prompt을 사용하여 시도했지만 다시는 작동하지 않습니다. 여기에 내가 뭘하는지의 예PEG.js : 프롬프트를 사용하는 방법?

{ 
    function cin() { 
     window.prompt(""); 
    } 

    function changeVar(variable, newValue) { 
     if(typeof variable === typeof newValue) { 
      variable = newValue; 
     } else if(typeof variable === 'undefined') { 
      alert("You can't assign a value to a variable if the variable isn't declared yet!"); 
     } else { 
      alert("Bad assignment. In C++, a variable *must* have the same type *all the time*."); 
     } 
    } 
} 

stdin = 
    whitespace* "std::cin" whitespace* ">>" whitespace* varToBeChanged:[a-zA-Z_]+ ";" whitespace* 
     { changeVar(varToBeChanged, cin('')); return varToBeChanged; } 

whitespace = 
    space:[ \t] 
     { return space; } 

을하고 파서 테스트 필드 :

std::cin >> variable; 

보고 주셔서 감사합니다. 나는 이것을 검색하고 SO 검색을 시도했지만이 검색 결과를 찾지 못했습니다.

또한 여기에 main piece of code이 있으며, 현재 필요한 모든 추가 정보가 필요합니다. 나는 이것에 대해서도 몇 가지 문제를 겪고있다. 그러나 나는 또 다른 질문을 게시하기 전에 그것들을 스스로 알아 내려고 노력할 것이다. window 또는 DOM과 같은 어떤 UI에 액세스 할 수 없습니다 -

+0

왜'cin' 문자열을 분석하기 위해 * prompt *을 사용해야합니까? 여기서 무엇을하고 있는지 잘 모릅니다. – Bergi

+0

누군가 적절한 PEG.js 형식을 제거했습니다. 마지막 줄은'{}'안에 들어가서,'std :: cin >> [a-zA-Z_]'가 일치하면 JS를 실행하도록되어있다. 구문 분석을위한 것이 아니라 위에서 언급 한 문자열이 발견되면 실제로 조치를 취하는 것입니다. 또한, 혼란 스러울 때를 대비하여,'changeVar'는 변수의 값을 변경하지 않고 변수의 값을 변경하는 함수입니다. – Alonessix

+0

PEG.js가 작동하는 방식을 오해했습니다. 분명히 파서뿐만 아니라 통역사이기도합니다. 구문에 대한 변경 사항을 롤백했습니다. – Bergi

답변

0

당신이 http://peg.arcanis.fr/를 사용하는 경우는, 다음 파서 코드는 Web Worker의 내부에서 실행됩니다. "undefined variable"오류는 문자 그대로 window 또는 prompt이 선언되지 않았 음을 의미합니다.

코드를 http://pegjs.majda.cz/online에 붙여 넣으면 웹 페이지 환경에서 실행되고 완벽하게 작동합니다.