2

これらの文字列を除いて、 にでも一致する正規表現は何ですか: =>|

javaccに精通している場合は、ANYTHING以下に示すようにトークンを定義しようとしています。

TOKEN :
{
 <ARROW: "=>" >
|
 <ANYTHING: (["\u0001" - "\uffdc"])+>
|
 <PIPE: "|">
|
 <UPPER_CHAR: (["A"-"Z"])>
}

ありがとう

4

2 に答える 2

4

次のようなものを試してください。

Test.jj

options {
    STATIC = false ;
}

PARSER_BEGIN(Test)
public class Test {
  public static void main(String[] args) throws Exception {
    Test parser = new Test(new java.io.StringReader("foo=>bar=baz|done"));
    parser.Parse();
  }
}
PARSER_END(Test)

TOKEN :
{
     < ARROW    : "=>" >
  |  < PIPE     : "|" >
  |  < ANYTHING : (~["=", "|"] | "=" ~[">"])+ >
}

void Parse() : 
{} 
{
  (Any())* <EOF>
}

void Any() :
{Token t;}
{
  ( t=<ARROW>    {System.out.println("ARROW    = '" + t.image + "'");}
  | t=<PIPE>     {System.out.println("PIPE     = '" + t.image + "'");}
  | t=<ANYTHING> {System.out.println("ANYTHING = '" + t.image + "'");}
  )  
}

パーサークラスを生成します。

javacc Test.jj

main次のメソッドを実行します。

javaテスト

入力に対して以下を出力します"foo=>bar=baz|done"

ANYTHING ='foo'
矢印='=>'
ANYTHING ='bar = baz'
PIPE ='|'
ANYTHING='完了'
于 2012-10-18T18:30:36.907 に答える
2

おそらく、字句状態を使用するのが最善です。これが機能する可能性のあるREソリューションです

  ("=")+    |     ( ~["=","|"]  |  ("=")* ~["=","|",">"] )+  ("=")*

ちなみに、空の文字列が「何でも」にならないように質問を少し変更したので、このreは、空ではなく、「|」や「=>」を含まない文字列と一致する必要があります。

于 2012-10-24T22:03:12.517 に答える