【发布时间】:2014-06-27 04:42:50
【问题描述】:
我正在尝试 YACC 语法部分,但它给了我,这有什么问题?我该如何解决?在 Bison/YACC 中有一些定义语法的规则吗?
C:\Users\Dilan\Documents\LexProgram\miniProject>bison -dy videostore.y
conflicts: 1 shift/reduce
我的 YACC 代码是:
%start VideoStore
%token title
%token type
%token name
%token days
%%
VideoStore : MOVIES CUSTOMERS
| CUSTOMERS MOVIES
| MOVIES
| CUSTOMERS
;
MOVIES : MOVIES MOVIE
| MOVIE
;
MOVIE : title type RENTALS2
;
RENTALS2 : RENTALS2 RENTAL2
| RENTAL2
;
RENTAL2 : CUSTOMER1
;
CUSTOMER1 : name days
;
CUSTOMERS : CUSTOMERS CUSTOMER
| CUSTOMER
;
CUSTOMER : name days RENTALS
;
RENTALS : RENTALS RENTAL
| RENTAL
;
RENTAL : MOVIE1
;
MOVIE1 : title type
;
%%
int trace=0;
我的问题是 VideoStore.y:冲突:2 班次/减少 以及如何为此编写 LEX?
【问题讨论】:
-
你有这个示例输入文件吗?基本上,警告意味着您的语言有歧义。它可能会也可能不会起作用。更大的问题是您没有使用关键字,并且您的词法分析器需要识别字符串是客户名称还是电影标题。建议:改为使用 XML。
-
词法分析器需要什么关键字?和。我已经浏览了cis.uab.edu/softcom/GrammarInference/publications/scesm2005.pdf 这个研究表,我想试试这个语法,而不是所有的研究表。我正在学习这个
-
词法分析器不需要关键字,解析器需要。词法分析器只能看到字符序列,因此任何文本都可能被解析为“字符串”(而不是标题或名称),这仍然会产生更多歧义。如答案中所述,您必须在文件中引入一些终端标记,例如围绕一组事物的分隔符或括号。
标签: compiler-construction bison context-free-grammar