построение языка с использованием lex yacc - PullRequest
0 голосов
/ 30 октября 2019

Я сейчас создаю язык, используя lex / yacc. Я закончил писать файл lex без ошибок, но файл yacc показывает ошибку «Символ запуска не выводит никакого предложения»

в чем может быть ошибка

это мой код yacc:

%{
#include <stdio.h>
extern int yylineno;
extern int yylex();
extern int yyerror();
%}
%token PLUS MINUS DEV TIMES ASG INT DOUBLE CHAR IF LPAREN RPAREN OP CL LT GT LE GE EQ NE WHILE PRINT INPUT ID INT_LITERAL STRING_LITERAL DBL_LITERAL COMMA START END
%%
Start_Program: START statements END;
statements: statements statement;
statments: statement;
statement: Dec_stmt | assignment_stmt | print_stmt | read_stmt | condition_stmt | while_stmt ;
Dec_stmt: Type ID | Type ID COMMA IDList ;
IDList: ID | ID COMMA IDList;
Type: INT | DOUBLE | CHAR ;
assignment_stmt: ID ASG expression ;
expression: exp EQ exp | exp NE exp | exp LT exp | exp LE exp | exp GT exp | exp GE exp | exp;
exp: exp PLUS term | exp MINUS term | term ;
term: term TIMES factor | term TIMES factor | factor;
factor: LPAREN exp RPAREN | INT_LITERAL | DBL_LITERAL | STRING_LITERAL | ID ;
print_stmt: PRINT LPAREN ID RPAREN | PRINT LPAREN STRING_LITERAL RPAREN ;
read_stmt: ID ASG INPUT LPAREN RPAREN ;
condition_stmt: IF LPAREN expression RPAREN OP statements CL;
while_stmt: WHILE LPAREN expression RPAREN OP statements CL;
%%

int main() {
yyparse();
return 0;
}
...