인터넷에서 lex/yacc 예제 및 자습서를 검색하십시오. 하고 학습. C로 프로그래밍 할 수 있어야합니다.
http://ds9a.nl/lex-yacc/cvs/lex-yacc-howto.html
렉스는 정규식 기반 사양에서 C 코드를 생성하는 대 유닉스 렉서이다. yacc는 구문 트리를 만들기위한 고대 유닉스 파서입니다. 그것은 C 코드도 생성합니다.
현대적인 GNU 버전의 도구는 flex 및 bison이라고합니다.
다음은 계산기의 yacc 코드의 핵심입니다. 그것은 토큰으로부터 얼마나 높은 수준의 구조가 만들어 지는지를 보여주고 그러한 구조가 발생할 때 무엇을해야 하는지를 보여줍니다.
%%
list : // empty
| list stm '\n' { print(); }
| list cmd '\n' { print(); }
| list cmd stm '\n' { print(); }
| list stm cmd '\n' { print(); }
| list cmd stm cmd '\n' { print(); }
| list error '\n' { yyerrok; print(); }
;
cmd : COMMAND { commands[$1](); }
;
stm : expr { output = $1; outputPush(); }
| VAR '=' expr { vars_set($1, &$3); }
;
expr : { outputGet(); $$ = output; }
| '_' { outputGet(); $$ = output; }
| '(' expr ')' { $$ = $2; }
| expr OPADD expr { $$ = tNumOpIn ($1, $2, $3); }
| expr OPMUL expr { $$ = tNumOpIn ($1, $2, $3); }
| expr OPPOW expr { $$ = tNumOpIn ($1, $2, $3); }
| OPPRE expr { $$ = tNumOpPre($1, $2); }
| VAR { if (vars_get($1,&$$)) $$=output; }
| NUMBER { $$ = $1; }
;
%%
출처
2014-02-24 16:29:19
SzG