yacc规则语法怎么解释?

查看:239
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆