yacc - Error in array declaration grammar -


%token digit return identifier colon comma else if nl keyword br read  write while equal %start y2 %left '-' %left '+' %right '=' %% stmt1:keyword identifier x1 //for initialization. ; y2:stmt1 stmt2 //y2 starting variable | ; x1:colon {printf(" int a/ char a");}  |'['digit']'colon {printf("for array declarations");}  ; stmt2:keyword identifier"("stmt3")"stmt5 {printf("for functions");}  | ; stmt3:keyword identifier x2  |  ; x2:stmt4 {printf("for parameter int/char");}  |"["digit"]"colon {printf("for parameter int arr[]/char arr[]");} //in production parser not responding ; stmt4:comma stmt3 {printf("to have multiple arguments");}  | ; %% 

i parsing string int a[10]; instead of parsing, execute yyerror() every time. code parses int a; single statement char a; also.

make sure lexer returns '[' when sees open bracket.

mixing single-quoted tokens '[' , named tokens colon confusing , suggests copy-and-pasting different sources, rather designing program. since lexer , parser must agree on handling of tokens, form of creating programs error-prone. recommend using single-quoted single-character tokens throughout, since more readable , simplifies lexer.

with respect x2, there difference between '[' , "[". want first one. same problem found in stmt2, uses​ "(" , ")" instead of single-quoted versions.


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -