0

アルファベットと数字を別々に解析する文法があります。

grammar Demo;

options
{
  language = C;
}

program : process+
        ;

process :  Alphanumeric {printf("\%s",$Alphanumeric.text->chars);}
        ;

Alphanumeric : (Alphabet | Number)+
             ;


fragment Alphabet : ('a'..'z')+
                  ;

fragment Number : ('0'..'9')+
                ;

入力が「a10」または「b10」であるとすると、printfステートメントはa10またはb10を表示しますが、アルファベット文字と数字を分割する必要があります。つまり、「a」が必要なため、aと10を別々に分割する必要があります。 '他の文字列と比較し、'a'または'b'の隣の数字などをテーブルに保存します。

正確には、a10を分割する必要があります->比較用にa、ストレージ用に10を分割し、アルファベットと数字の両方を別々にフェッチできるようにする必要があります。

このようなものの文法を定義する方法は?

4

1 に答える 1

1

Alphabetおよびをパーサーに個別に公開する必要がありNumberます。つまり、これらはレクサーのトップレベルのルール (ルールではないfragment) である必要があります。その結果、Alphanumericパーサー ルールにもなります。

alphanumeric : (Alphabet | Number)+
             ;

Alphabet : ('a'..'z')+
         ;

Number : ('0'..'9')+
       ;
于 2013-03-06T18:34:54.827 に答える