flex와 bison을 사용하여 자체 스크립팅 언어를 작성하려고합니다. 기본 구문 분석기가 있고 for 문을 C 언어와 매우 비슷한 for 문을 추가하고 싶습니다. for 문에 관련된 동작을 코딩하는 방법을 나에게 분명하지 않다Bison/Yacc의 루프 의미에 대해
가정 해 보겠습니다 I에 대해 다음과 생산을 문 '에 대한': 무엇을 할 나에게 분명하지 않다
forStatement: FOR '(' expr ';' expr ';' expr ')' statements END; {}
이 생산과 관련된 행동. 평가 및 실행
evaluate($3);
while(evaluate($5)) { execute($9); evaluate($7); }
evaluate($7);
두 개의 C의 기능은 다음과 같습니다
는 직관적으로 나는 등, 이전 문에 관련된 행동에 뭔가를해야한다고 알고 있습니다.
그래서 나는이 개 질문이 (문법 생산에 관련된 동작을위한 C 코드를 작성한다고 가정) :
- '평가'의 과제는 무엇인가. 즉, 루프의 모든 단계에서 표현식의 값이 변경 될 수 있다는 것을 고려하여 모든 루프에서 표현식을 평가하려면 어떻게해야합니까?
- '실행'작업은 무엇입니까? 내 말은, 각 문이 루프의 모든 단계에서 다른 결과를 가지고 있다는 것을 고려하여 for 루프 내부의 문을 평가하는 방법입니다.
'expr'의 값은 런타임에 변경되며 for body 내부의 명령문에서도 마찬가지입니다.
글쎄, 어떻게 다른 진술을 다루었습니까? 'for '의 구조는 약간 비틀어 지지만 나머지 언어에 대해 이미 가지고있는 것을 재사용 할 수 있어야합니다. (그리고 그'else' 블록은'if'가 없으면서 무엇을하고 있습니까?) – Mat
사실을 말하기위한 벽은 내가 가진 것이 없습니다. 저는 수학 연산, 변수 할당, 그리고 delacred 변수를 저장하기위한 심볼 테이블을 포함하는 표현을 가지고 있습니다. 나는 다른 것들을 고쳤다. 내 생각은 do ... while 및 while 문이 비슷하고 if가 유사하기 때문에 while 루프가 한 번 실행되는 것과 같기 때문에이 개념부터 시작하는 것이 좋습니다. – salvo
그럼 Stack Overflow에 대한 질문이 너무 광범위합니다. 컴파일러/통역사 작성에 전념하는 모든 책이 있지만, 그것은 도전적입니다 (그러나 나는 듣기에 매우 교육적입니다). 가장 복잡한 것이 아니라 가장 간단한 것으로 시작하는 것이 좋습니다. (즉, 'if'로 시작하고 'else'를 추가 한 다음 'while'을 추가하십시오.) 여기에서는 많은 리소스를 찾을 수 있습니다 (예 : http://stackoverflow.com/questions/453870/suggestions). -for-writing-a-programming-language) – Mat