gpt4 book ai didi

ubuntu - LEX 和 YACC : grammar implementation in NLP

转载 作者:行者123 更新时间:2023-12-04 18:41:57 25 4
gpt4 key购买 nike

我正在尝试构建 NLP 。但问题是我无法在其中获得一些东西。例如:如果在行动中我说

printf("print the third argument %s", $3) ;



然后它没有给我第三个论点而是它显示

print the third argument (null)



由于我正在尝试构建 NLP,因此包含参数对我来说很重要。所以我该怎么做 。下面我包括一些示例代码和输出:

pro.yacc 文件:
   %{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "y.tab.h"

int yylex(void) ;
static void yyerror(char *str)
{
printf("yyerror : %s " , str) ;
}
%}

%error-verbose
%token ASK
%token FIELD
%token QUALIFIER
%token MOJ
%token WORD
%token TOTAL
%token TABLE
%token EOL


%%

translate : select
| count
;


select : ASK QUALIFIER TABLE EOL { printf("SELECT * FROM %s",$3) ;}
| ASK FIELD QUALIFIER TABLE EOL { printf("SELECT DISTINCT %s FROM %s ", $2, $4) ;}
| ASK QUALIFIER TABLE FIELD EOL { printf("SELECT DISTINCT %s FROM %s ", $4, $3) ;}
| ASK QUALIFIER FIELD WORD FIELD QUALIFIER TABLE EOL { printf("SELECT DISTINCT %s , %s FROM %s", $3, $5, $7) ;}
;

count : MOJ TABLE EOL { printf("SELECT COUNT(*) FROM %s", $2) ;}
;


%%


#include "lex.yy.c"
extern int yylex() ;
extern int yyparse() ;
extern FILE *yyin ;
int main()
{
FILE *myfile = fopen("sample.txt" , "r") ;
if(!myfile)
{
printf("Can't open the file ") ;
return -1 ;
}
yyin = myfile ;
do
{
yyparse();
}while(!feof(yyin)) ;
yylex_destroy() ;
return 0 ;
}

pro.lex:
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "y.tab.h"
#include "pro.tab.h"

void yyerror(char *str) ;





int line_num = 1 ;
%}




%%

[\t] ;

"reply" { return ASK ; }

"display" { return ASK ; }

"and" { return WORD ; }

"of every" { return QUALIFIER ; }

"all" { return QUALIFIER ; }

"the" { return QUALIFIER ; }

"every" { return QUALIFIER ; }

"name" { return FIELD ; }

"id" { return FIELD ; }

"how many" { return MOJ ; }

"book" { return TABLE ; }

"." { return EOL ; }



%%

在使用 i/p 运行输入文件 sample.txt 后:“阅读每一本书。” (不包括引号我得到了o/p
                            SELECT * FROM (null)

.我实际上应该用 book 代替 (null) 。 .. 我怎么做 ?

附言:每次我尝试在所有语法中打印该参数时都会得到这个空值

最佳答案

你的词法分析器没有保留单词的拼写——它只是返回一个数字,而不是确保该单词除了 yytext 之外是可用的。 .你的语法没有抄袭yytext当 token 到达时。因此,如果您需要保留字符串(以便您可以区分“回复”和“显示”,例如, token ASK 的两种替代拼写),那么您必须确保信息被保存、复制、发布。到语法规则运行时,它很可能已经读取了更多的标记——甚至可能遇到了 EOF。因此,您通常需要为 YYSTYPE(和 %union )提供更复杂的结构,以便稍后获取所需的信息。

关于ubuntu - LEX 和 YACC : grammar implementation in NLP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15612071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com