문제

나는 들소를 배우고 현재 내가하는 유일한 일은 rpcalc 예를 들어, 이제 인쇄 기능을 구현하고 싶습니다 ( printf C) print ("Something here");, 그러나 나는 인쇄 기능을 구축하는 방법을 모르고 그것을 만드는 방법을 모르겠습니다. ; 줄의 끝으로.
당신의 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

먼저 스스로에게 물어봐야합니다.
내 '인쇄 ( "뭔가")의 [하위] 부분은 무엇입니까? 구문?

이러한 부분을 식별하면 적용 가능한 생산 규칙과 함께 문법 구문 규칙의 형태로 이들을 설명하십시오. 그런 다음 Bison이 파서를 생성하도록하십시오. 그것에 관한 것입니다.

당신을 당신의 길에두기 위해:
반 열은 아마도 분리하는 데 사용할 요소 일 것입니다. 진술 (그런 사람은 다른 사람에게 인쇄 할 "전화").
'인쇄'자체는 아마도 예어, 또는 바람직하게는 언어의 기본 기능 이름입니다.
그만큼 인쇄 문 취하는 것처럼 보입니다 문자 그대로 문자열 그 주장 중 하나로서. 문자 문자열은 이중 인용문으로 시작하고 끝납니다 (아마도 그 자체로 탈출 한 따옴표를 허용합니다).
대담하고 이탤릭체 위의 표현식은 언어의 구문에서 정의해야 할 엔티티 (Parser Lingo의 '기호') 중 일부입니다. 이와 같은 들소 문법 규칙을 사용하십시오.

stmt : print_stmt ';' | input_stmt ';'| some_other_stmt ';' ;
prnt_stmt : print '(' args ')' 
     { printf( $3 ); }
    ;

args : arg ',' args;
...

질문이 반 열에 대해 물었을 때, 아마도 다른 용도로부터의 혼란이있을 수 있습니다. 예를 들어 ';' 당신의 언어 구문에 속합니다. (인용 없음) 각 문법 규칙이 끝나면 Bison의 언어의 일부입니다.

참고 : 이것은 물론 필수를 보여주는 것을 목표로하는 단순한 구현입니다. 또한 들소 구문은 tat 꺼져있을 수 있습니다 (그곳에 있었지만 끝났지 만 오래되었다 ;-) 나는 "Met" antlr 가볍고 완전히 자체적으로 함유 된 자연이 어떻게 적절하게 만들 수 있는지 알지만 들소로 돌아 오지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top