yacc规则语法怎么解释?
本文介绍了yacc规则语法怎么解释?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
最近刚学习lex与yacc,yacc第二部分,也就是规则部分稀里糊涂的. 书上的有些地方也没看明白.
%{
#include <stdio.h>
%}
%token NOUN PRONOUN VERB ADVERB ADJECTIVE PREPOSITION CONJUNCTION
%%
sentence: simple_sentence {printf("parsed a simple sentence. \n");}
| compound_sentence {printf("parsed a compound sentence. \n");}
;
simple_sentence: subject verb object
| subject verb object prep_phrase
;
compound_sentence: simple_sentence CONJUNCTION simple_sentence
| compound_sentence CONJUNCTION simple_sentence
;
subject: NOUN
| PRONOUN
| ADJECTIVE subject
;
verb: VERB
| ADVERB VERB
| verb VERB
;
object: NOUN
| ADJECTIVE object
;
prep_phrase: PREPOSITION NOUN
;
%%
extern FILE *yyin;
main()
{
do {
yyparse();
} while(!feof(yyin));
}
yyerror(s);
char *s;
{
fprintf(stderr, "%s \n", s);
}
上部分代码中
规则:
verb: VERB
| ADVERB VERB
| verb VERB
;
表达的意思是 定义一个标记 verb,如果匹配到了 VERB 或者 ADVERB VERB 或者 verb VERB,就做某个动作?
那我不是特别明白
verb: VERB
| ADVERB VERB
| verb VERB
;
这里的ADVERB VERB 之间用空格连接是什么意思呢? 麻烦懂的人用通俗的语言描述一下如何理解规则这部分的语法
解决方案
verb: VERB
| ADVERB VERB
| verb VERB
;
|
或
verb
谓语
VERB
动词
ADVERB
副词
合起来就是:
谓语
的构成方式:动词 或
副词 动词 或
谓语 动词
你可以去看看BNF范式
的介绍~
这篇关于yacc规则语法怎么解释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文