2014-03-30 47 views
0

我想用Lex在雙引號內打印文本。Lex用C編碼

["]?([A-Z]*[a-z]*[0-9]*)*["]? { 
printf("STR(%s),yytext"); 
return 1; 
} 

我用這個但蹊蹺的是,我不能弄明白。

實施例:

輸入

"CNG230 ASN1 Average" 

輸出

STR("CNG230 ASN1 Average") 

實施例2:

輸入

"CNG230/492 Global average" 

輸出

STR("CNG230/492 Global average") 

回答

1

其實你不說有什麼問題或者你的例子,我假設

printf("STR(%s),yytext"); 

僅僅是

printf("STR(%s)",yytext); 

一個錯字,但這裏有兩個問題,我可以看到。

  1. 如果你指定你的問題正確,你不在乎,只要它是不是又報價引號內是什麼。所以你的規則減少到

    \"[^"]*\" { ... } 
    
  2. 如果沒有規則匹配的缺省動作是回顯輸入。因此,您需要另一個規則來消耗不符合此規則的所有內容。將這樣算賬:

    .|\n {} 
    
0

您的主要問題似乎是您的模式不允許空間爲有效字符。你也不需要與您匹配的這麼複雜:

["]?[A-Za-z0-9 ]*["]? { 
    printf("STR(%s)\n", yytext); 
    return 1; 
} 

請注意,我還與打印值提供printf(),並輸出一個換行符在最後,所以你會看到的信息及時。

+0

這是一個很好的形式給出感謝那可是appyling這個代碼,我得到了錯誤,說行號和規則不能匹配後也沒有包含像/字符的另一個例子。所以,你可以說下面的部分是可以的,但需要了解如何創建[「]?[A-Za-z0-9] * [」]?以正確的方式?謝謝。 – Xethen

+1

我無法調試你沒有顯示的東西。單獨採用(以'%%'爲前綴,後跟'%%'),該片段可以編譯爲一個獨立的程序,當我在其中鍵入''abc def''時,它會以'STR (「abc def」)。所有符合你問的事。沒有看到更多的掃描儀,沒有人可以告訴你其他代碼有什麼問題。 –

+0

我設法做到了,但它像STR(「C」STR(N))...我怎麼可能在STR(「CNG230 ASN1 Average」)格式中做? – Xethen