저는 C++에서 Flex 및 Bison으로 작업하고 있습니다. 나는이 공구를 사용하는 것을 배우고 있으며, 시작하는 가장 좋은 방법은 간단한 계산기를 수행하는 것입니다. 일단 내 calc.y 및 calc.l 파일에서 응용 프로그램 (실행 파일)을 생성하면 .exe 파일을 실행하여 사용할 수 있지만 지금은 응용 프로그램에서 사용하기 위해 파일 C++에 포함하
내가 주석 행은 # 문자 여기 에 태초에 간단한 계산기를 만들기 위해 노력하고있어 이 .L 파일 코드 %{
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "y.tab.h"
char str[256];
void yyerror(char *);
%}
%x COM
%%
cpp2html.c를 컴파일하여 makefile을 작성하여 cpp2html.o를 생성하려고합니다 (이 작업을 완료했습니다). 다음으로 flex cppscanner.l을 실행하여 언어 cppscanner.l에서 lex.yy.c 파일을 생성해야합니다. (나는 이것을했다). 그렇다면 lex.yy.c를 컴파일하여 lex.yy.o를 생성해야합니다. 그리고 .o 파일
관련 플렉스 부분을 반환보다 다른 int x; int y; begin x = 72; y=79; x=y + x; end
그것은 잘 구문 분석하지만 내 문제 : Fl 전 인쇄물 : Returning x 및 Returning y 들소 프린트 : $1 is 'x;' 및 $1 is 'y+'; 왜 ';' 및 '+'를 $ 1에? 는 yytext는 플렉스 액션 자체
필자는 lex 문법의 범위 내에서 파일을 포함하고 있으며, the flex manual에서 가져온 예제 코드를 보면, 사용중인 파일 핸들이 해제되지 않았는지 궁금해했습니다. yypop_buffer_state()에서 시작하는 생성 된 코드를 뚫고 파일 핸들이 닫히거나 해제되지 않는다고 결론을 냈습니다. 누군가가이를 확인할 수 있습니까? 예제 코드가 잘못 되었
을 사용하여 입력 파일을 토큰 화하여 결국 Bison을 사용하여 간단한 C 컴파일러를 만들 수 있습니다. 그래서 나는 아직도 Flex와 장난 그리고 난 번호를 추출하고 식별자를 무시하기 위해 노력하고있어 및 공백 %{
#include "stdio.h"
%}
dgt [0-9]
letter [A-Za-z]
white [ \r\t]+
id {le
저는 flex와 bison을 사용하여 프로그래밍 언어 용 간단한 파서를 작성하려고합니다. I 단자 (표준 입력)에서 테스트되었으며, 이것은 항상 (yyerror()가 정의된다) 것을 말한다 : 제 2 입력에 Error: syntax error, unexpected SOME_TOKEN, expecting $end, on line: 2
한다. 다른 말로하면
현재 flex/bison 프로젝트를 진행 중입니다. 하나의 실행에서 여러 파일을 구문 분석해야하므로 루프를 만들어 YYPARSE()를 여러 번 실행했습니다. flex가 어휘 또는 구문 오류를 발견하면 파일 구문 분석이 중지되고 프로그램에서 다음 파일 구문 분석을 시작합니다. 그러나 새 파일의 구문 분석은 처음부터 시작하지 않습니다. 실제로 파싱이 파일 3의
상당히 복잡한 표현식 언어를 구문 분석 할 수있는 Jison을 사용하여 파서를 작성하고 있습니다. 이 언어에서 , 그것은 지원 문법 같은 : 여기 stats_expression
: stats_function '(' eval_expression ')'
| other_stats_aggregation
;
stats_function
구조 VHDL은 대소 문자를 구분 것을 `pragma TOKEN1_NAME TOKEN1_VALUE
`pragma TOKEN2_NAME TOKEN2_VALUE
`pragma TOKEN3_NAME TOKEN3_VALUE
`pragma TOKEN4_NAME TOKEN4_VALUE
TEXT{
// A valid VHDL or verilog
}
`pr