3

トークン レベルのあいまいさに問題があります。

問題はこんな感じ。私のコードはこのように見えるので、トークン t_UN1 の優先度が高くなります。

t_ignore = ' \t\v\r' # whitespace 

....

def t_UN1(t): #NS_
    r'NS\_'
    return t
def t_IDENTIFIER(t):
    r'[a-zA-Z][a-zA-Z0-9_]*'
    return t

....

私はそれを達成したいと思います。文字列: NS_XYZ は「IDENTIFIER」として識別され、空白で囲まれた単一の NS_ は「UN_1」として識別されます。

どうすればいいですか?現在、文字列 NS_XYZ は単純に UN1 と IDENTIFIER の 2 つのトークンに分割されています。

4

1 に答える 1

1

「空白で囲まれた単一の NS_」を取得したい場合は、トークン文字列に空白文字クラスを追加できます。

def t_UN1(t): #NS_
    r'\s+NS\_\s+'
    return t

補足: PLY に関する質問については、ply-hack google グループが PLY 関連の質問をするのに適した場所です。

于 2013-03-11T15:16:43.683 に答える