2012-01-31 18 views
1

定義:それを認識するは、私のようにそれをやっていた

/* regular definitions */ 

    DECLARATIONS    declarations 
    ENDDECLARATIONS   (enddeclarations) 
    INT      (int) 
    METHOD     (method) 
    PROGRAM     (program) 

そして

{DECLARATIONS}   {yycolumn+=yyleng;return (DECLARATIONSnum);} 

が、私は彼らが認識されなかったことが判明しました... ..もし私がそれを好きなら:

"declarations"   {yycolumn+=yyleng;return (DECLARATIONSnum);} 

それは働いた。

program p2; 
    class Test { 
    method void main() 
    declarations 
     int x; 

そして現在、それはのようである:

program p2 
    5  1   SEMInum 
    class Test 
    6  1   LBRACEnum 
    method void main 
    7  1   LPARENnum 

プログラム、クラスは次のように認識されなければならない私は本当に

サンプル入力が似ている....理由を理解することはできません予約語ですが、認識されません....

+0

あなたはLEXのどのバージョンを使用していますか?問題を示す完全な.lファイルを提供します。フラグメントから1つ構築すると、どの形式のものであろうとそのキーワードを認識してうまく動作します。 –

+0

@ChrisDodd lexバージョン2.5.4です。ファイル全体が少し長すぎます...このエラーはバージョンから発生する可能性はありますか? – faz

答えて

4
DECLARATION    declarations 

単数

{DECLARATIONS}   {yycolumn+=yyleng;return (DECLARATIONSnum);} 

複数

+0

ありがとう、実際には重大な問題ではないようですが、実際にはこれらの定義を認識できません... "宣言"タグの場合、複数の権利を作ってもまだ動作しません – faz

+0

括弧はパターンの一部?もしそうなら、それらは引用符で囲まれていなければなりません。もしそうでなければ、それらの理由がないようです。 – Kevin

+0

どの入力を使用しているか、どのように解析するのか、どのように解析されているかのサンプルを示してください。 – Kevin

関連する問題