Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flex BISON:如何定义一个句子?_Bison_Definition_Flex Lexer - Fatal编程技术网

Flex BISON:如何定义一个句子?

Flex BISON:如何定义一个句子?,bison,definition,flex-lexer,Bison,Definition,Flex Lexer,在Flex中,使用[a-zA-Z][a-zA-Z0-9]*来定义单词。我如何定义一个句子? 以下是我的flex代码: %{ #include <stdio.h> #include <string.h> #include "y.tab.h" %} %% [0-9]+ yylval=atoi(yytext);return NUMBER; [a-zA-Z][a-zA-Z]* return WORD; [a-zA-Z][a-zA-Z0

在Flex中,使用[a-zA-Z][a-zA-Z0-9]*来定义单词。我如何定义一个句子? 以下是我的flex代码:

%{
#include <stdio.h>
#include <string.h>
#include "y.tab.h"
%}
%%
[0-9]+                  yylval=atoi(yytext);return NUMBER;
[a-zA-Z][a-zA-Z]*       return WORD;
[a-zA-Z][a-zA-Z0-9]*    return TERM;
%%
%{
#包括
#包括
#包括“y.tab.h”
%}
%%
[0-9]+yylval=atoi(yytext);返回号码;
[a-zA-Z][a-zA-Z]*返回单词;
[a-zA-Z][a-zA-Z0-9]*返回期限;
%%
下面是野牛:

%{
#include <stdio.h>
#include <string.h>

void yyerror(const char *str)
{
    fprintf(stderr,"error: %s\n",str);
}

int yywrap()
{
    return 1;
}

main()
{
    yyparse();
}

%}

%token NUMBER WORD TERM 

commands: /* empty */
    | commands command
    ;
command:
    rule1
    |
    rule2
;
%{
#包括
#包括
无效错误(常量字符*str)
{
fprintf(strderr,“错误:%s\n”,str);
}
int yywrap()
{
返回1;
}
main()
{
yyparse();
}
%}
%符号数字字术语
命令:/*空*/
|命令命令
;
命令:
规则1
|
规则2
;


感谢

Flex或lex是lexers解决方案,它们的输出通常是一个令牌,正如您前面定义的,它可以是一个世界、一个数字或一个术语。 另一方面,yacc或bison是语法分析器,我们在这里定义语法(一组规则),它应该验证您将传递的输入流,在这里是一个句子

那么现在到你的问题了:一个经过验证的句子是由我们语法中定义的规则验证的句子,比如“hello world”,是由这个规则验证的

sentence : WORD WORD '.'
         ;
或者这句话“我已经20岁了”,所以规则一定是这样的

sentence    : words NUMBER words      /*words non terminal (list of words)*/
            ;
words       : words WORD
            | WORD
            ;
因此,您需要定义规则,了解将要解析的输入流