2014-01-13 224 views
0

我在lex和yacc中真的很新,我想編寫一個非常簡單的程序,它詢問字符串的輸入,將它存儲在變量中,並檢查是否一次插入相同的值再次。比方說:我文件lex yacc比較兩個字符串

input1 = 'abc' 
input2 = 'def' 
input3 = 'ghi' 
input4 = 'def' 
STOP input2 equals input4 

部分:我YACC文件

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

%union { 
     char* lexeme;    
     } 

%token ID 
%% 

所有的投入應該在ID標記內匹配的

%option noyywrap 
%{ 
#include <stdlib.h> 
#include <string.h> 
%} 
alpha [a-zA-Z] 
%% 
{alpha}* return ID; 

一部分。

+1

您需要保留一個變量及其內容的表格。這不是Yacc會爲你做的事情,但你必須編寫正常的C(或其他語言)代碼才能做到。 Yacc將幫助您檢查輸入的格式,並在輸入中找到新分配時調用您的代碼。 –

+0

[Flex/Lex - 我如何知道變量是否被聲明]可能的重複(http://stackoverflow.com/questions/27284546/flex-lex-how-do-i-know-if-a-variable-被宣佈) –

回答

1

不確定關於return ID; 我會返回*yytext其中包含您的令牌在char*。 實際上,你可以看看這個簡單的calculator example

關於您的問題,您可能需要創建/實施char*名單解析期間每個輸入令牌的存儲,然後檢查當前的一個屬於列表。由於這需要更多的工作,上面的示例(以及所有網站)應該有所幫助。

+0

先前插入的代碼段工作正常,它返回預期的內容。我正在尋找一些關於如何將ID轉換爲變量的建議,讀取其中的許多內容並在重複輸入的情況下提示用戶。 – RobMor