대학에서 C 언어로 미니 셸을 만드는 프로젝트가 있습니다. 명령 줄을 구문 분석하기 위해 필자는 lex 및 yacc 도구를 사용합니다. 하지만 선을 분석하고 싶습니다. 토큰이 발견되면 내 struct 명령에 인수를 추가하고 명령을 실행하기 위해 개행 문자를 찾으면 yyparse를 종료합니다. 내 렉스 파일 ... 인쇄 프롬프트 후 및 분석 relauch :
나는 Bison/Flex를 배우고 이미 작성된 C++ 코드를 다운로드하려고했습니다. 이미 생성 된 파서가있는이 (http://www.jonathanbeard.io/tutorials/FlexBisonC++) 문서를 발견했습니다. 지금은 PROJECT(CTM)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(CMAKE_CXX_ST
나는 Bison을 사용하여 C 파서를 쓰고있다. 당신은 예를 들어 수행 할 때 %parse-param {YYSTYPE *root} /* Used to detect the statement/declaration type, and print the tokens back out again */
/* Tokens defined here, etc */
%star
연습용으로 작은 컴파일러를 설계하려고합니다. 아직 중간 코드 최적화 또는 아직 최적화에 관한 내용을 읽지 않았습니다. 지금까지 필자는 FLEX/BISON 파일을 사용하여 문법을 설명했으며 잘 작동하는 표현식을 사용했습니다. 이렇게하는 동안 나는 상수 표현과 같아야하고 상수 등가에 대한 모든 덧셈과 곱셈 식을 반복하고 파싱하는 동안 그 값을 계산해야한다고 생
yacc로 프로그램을 컴파일하면 오류가 발생합니다. 간접적 인 재귀 또는 다른 것을 사용했는지 이해할 수 없습니다. 나는 yacc에별로 관심이 없다. 내 코드의 규칙 섹션은 다음과 같습니다 내가 가진 stmtfor : exprfor OPENB CLOSEB { printf("\nValid For statement!\n"); } |
exprfor
bison과 flex를 사용하여 구현 된 계산기의 예제를 테스트하고 있습니다. 예제 코드는 파일 "RPN-모든 calc2.y"에서, : %{
#define YYSTYPE double
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int yyerror(const char* s);
int yyl
나는 bison flex를 사용하여 중온 계산기를 작성하는 예제를 테스트하고 있습니다. 나는 모든 것이 괄호 "()"를 제외하고 옳다는 것을 발견했다. 대괄호로 계산을 입력 할 때 계산 결과가 올바르지 않습니다. 여기에 파일 "중위 - calc.y" /* bison grammar file for infix notation calculator */
%{
나는 들소를 배우고 문제를 만난다. {1, 2, 3}과 같은 정수 세트를 허용하도록 RE를 설계하려고합니다. 다음은 제 코드의 일부입니다. 간단한 계산이 세트 코드가 올바르게 작동 - I 입력 "{2} {1}"때 printf("given {, str_to_out before %s \n", str_to_out);
str_to_out[0] = '{';
pr