나는 lex 및 yacc 프로그래밍과이 yacc 프로그램을 사용하여 10 개의 시프트/감소 충돌을 제공하는 산술 표현식의 유효성을 검사하고 평가합니다. 이 프로그램 무슨 잘못을 지적 할 수 이 내가이 lex 611.l
yacc -d 611.y
같은 코드를 complie 할 때이 611.l %{
#include "y.tab.h"
#include<s
Yacc을 사용하여 작성한 문법이 있습니다. 문법의 관련 부분은 접미사 정의를 보면 당신은 내가 네 번째 규칙의 기간에 큰 따옴표를 가지고 있음을 알 수 있습니다 여기에 postfix
: primary
| postfix '[' expr ']'
| postfix '[' expr ':' expr ']'
| postfix ".
연관성에 문제가 있습니다. 어떤 이유로 내 = 연산자 내 :: 연산자 나는 "1 : [] = []"에 A와이있는 경우 예를 들어 그래서 ,보다 높은 우선 순위를 가지고 문자열, 나는 1 = [] : [] 를 같이 얻을 것 내 대신 표현 [1] = [] 내 문자열이 "1 : 2 : [] = []" 나는 그것을로를 구문 분석 I 생각 exp1 EQ exp2,
PLAY를 사용한 정규 표현식을 작성하고 있지만 yacc처럼 작동하지 않는 것으로 보입니다. 나는이 서면으로 작성했습니다 : 이산, 또는 연속 : def p_expression_TYPE (p):
'''
TYPE : [' Discrete ', ' Continuous ' ]
'''
은 TYPE은 그 값을 가질 수 있다는 사실을 표현. 나는 다음
Higuys, Byacc를 사용하여 텍스트를 파싱하고 싶습니다. 텍스트는 공백과 줄 바꿈으로 명확하게 나타납니다. 하나의 텍스트를 파싱하려면이 규칙에 대해 어떻게 생각하십니까? text: /* empty string */ {$$ = "";}
|TEXT {$$ = $1;}
|TEXT whitespace text {$$ = $1 + $2
flex/bison 관련 문제가 있습니다. 하나의 명령문을 실행하면 두 번째 명령문을 실행 한 후에 결과가 나타납니다. 왜? 여기 내가 원하는 무엇 : 여기 d>5
3 = 5
5+6=
11
PR 2+3
5
d>5
3 = 5
내가 얻을 수 (결과의 하단 부분주의) 무엇을 : 여기 %{
#include "calc.tab.h"
#include
나는 모든 노력을 나는 다음과 같은 오류가 점점 계속 : (라인) 20시 31분 : 오류 : 멤버에 대한 요청 '발'뭔가를 하지 구조 또는 조합 (라인) 22시 38분 오류 : 어떤 부재 요청 '브로'이 아닌 구조 또는 조합 (라인) 27 : 108 : 오류 : 회원 요청 '브로' 구조 나 노동 조합이 아닌 어떤 것에서 %{
#include "y.tab.
비 터미널 번호에 여러 데이터 유형을 지정하려고 시도했는데이를 찾았습니다 : Assigning multiple data types to a non-terminal in yacc. 다음 new11.y:53.54-55: $3 of `initialization' has no declared type
new11.y:57.81-82: $5 of `increment
yacc에서 파서 스택 오버플로를 실행 중입니다. 현재 구문 분석기 스택 크기가 어떻게 결정되는지 잘 모르겠습니다. 현재 파서 스택 크기를 얻는 방법이 있습니까? 그래서 토큰 수가 최대 스택 깊이에 도달하면 오류를보고 할 수 있습니까? 이 정보를 보유하고있는 yacc에 변수가 있습니까?