2016-12-19 1 views
-1

Antlr4でレクサールールを明白にする必要がありますか?Antlr4の数字範囲は? Antlr4ではレクサールールが明白であるべきですか?

は私が日付を解析したいと仮定し、私はレクサーに数字の範囲を定義し

ここ
hour: DIGIT09 | (DIGIT1 DIGIT09) | (DIGIT2 DIGIT04); 

month: DIGIT19 | (DIGIT1 DIGIT02); 

DIGIT12: '1'..'2'; 

DIGIT1: '1'; 

DIGIT2: '2'; 

DIGIT19: '1'..'9'; 

DIGIT09: '0'..'9'; 

DIGIT04: '0'..'4'; 

DIGIT04: '0'..'2'; 

を定義しました。しかし、彼らはあいまいなので、それは動作しないように見えます。

lexerではなくparserで範囲を定義できますか?

答えて

1

このタイプの検証は、解析ツリーが作成された後に実行されるリスナまたはビジターで最も効果的に実行されます。ちょうど数で開始:

NUMBER : [0-9]+; 

次にこれに基づいてhourmonthを定義します。

hour : NUMBER; 
month : NUMBER; 

あなたはパースツリーを持っていた後、それぞれに含まれるNUMBERが有効であることを検証するためにenterHourenterMonthを実装。

このアプローチでは、ユーザーが誤った入力を入力した場合に、エラー回復とエラー報告を最適に組み合わせることができます。

+0

私は 'enter'に準備値を持っていますか?私は 'exit'でこれをしてはいけませんか?テスト結果をどのように報告しますか? – Dims

関連する問題