トークン レベルのあいまいさに問題があります。
問題はこんな感じ。私のコードはこのように見えるので、トークン 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 つのトークンに分割されています。