2013-03-24 2 views
2

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 코드를 작성한다고 가정) :

  1. '평가'의 과제는 무엇인가. 즉, 루프의 모든 단계에서 표현식의 값이 변경 될 수 있다는 것을 고려하여 모든 루프에서 표현식을 평가하려면 어떻게해야합니까?
  2. '실행'작업은 무엇입니까? 내 말은, 각 문이 루프의 모든 단계에서 다른 결과를 가지고 있다는 것을 고려하여 for 루프 내부의 문을 평가하는 방법입니다.

'expr'의 값은 런타임에 변경되며 for body 내부의 명령문에서도 마찬가지입니다.

+0

글쎄, 어떻게 다른 진술을 다루었습니까? 'for '의 구조는 약간 비틀어 지지만 나머지 언어에 대해 이미 가지고있는 것을 재사용 할 수 있어야합니다. (그리고 그'else' 블록은'if'가 없으면서 무엇을하고 있습니까?) – Mat

+0

사실을 말하기위한 벽은 내가 가진 것이 없습니다. 저는 수학 연산, 변수 할당, 그리고 delacred 변수를 저장하기위한 심볼 테이블을 포함하는 표현을 가지고 있습니다. 나는 다른 것들을 고쳤다. 내 생각은 do ... while 및 while 문이 비슷하고 if가 유사하기 때문에 while 루프가 한 번 실행되는 것과 같기 때문에이 개념부터 시작하는 것이 좋습니다. – salvo

+1

그럼 Stack Overflow에 대한 질문이 너무 광범위합니다. 컴파일러/통역사 작성에 전념하는 모든 책이 있지만, 그것은 도전적입니다 (그러나 나는 듣기에 매우 교육적입니다). 가장 복잡한 것이 아니라 가장 간단한 것으로 시작하는 것이 좋습니다. (즉, 'if'로 시작하고 'else'를 추가 한 다음 'while'을 추가하십시오.) 여기에서는 많은 리소스를 찾을 수 있습니다 (예 : http://stackoverflow.com/questions/453870/suggestions). -for-writing-a-programming-language) – Mat

답변

2

두 가지 질문을 살펴보면 실행 엔진 (일종의 소프트웨어 CPU)이 필요하다는 것을 알 수 있습니다. 이 엔진은 변수의 상태를 기억하고 루프의 '주소'를 반환해야합니다 (선택한 구현 방법에 따라 다름).

구문 분석은 단지 첫 번째 단계 일뿐입니다. 각 문과 표현식에 대한 데이터 구조를 작성하고이 엔진에서 실행되도록하십시오.

stack-based systems을 살펴보십시오.

관련 문제