Eclipse 環境で ANTLR を使用しています。属性 ( n.text
) を別のルール ( )に渡しdescription
、後者のルールでセマンティック述語を使用して、 に関する入力を検証したいと考えていn.text
ます。これが私のコードです:
useCaseSpecification
: n=useCase '='
description[$n.text]
;
useCase
: ucID=('UC' INTEGER)? ucName
;
ucName
: caren io
;
caren
: 'create' | 'creates' | alter | read | 'erase' | 'erases' | notify
;
/* ..more code */
description[String str]
: 'Description' ':' primaryActor (useCase {str==$useCase.text}?) /* more grammar */
;
など、セマンティック述語表現の多くの代替手段を試しました{str.equals($useCase.text)}
が、何もしませんでした。パーサーが検証を行っていないようです。
例でインタープリターを実行すると、useCase タイプのすべての入力が許可されます。たとえば、入力が次の場合:
処方箋を作成する = 説明: 医師が処方箋を作成します /* ... */
それは正しいはずです。
入力が次の場合:
処方箋を作成する = 説明: 医師が Rrrrescription を作成します /* ... */
それは間違っているはずです。