2016-07-19 13 views
3

の予約キーワードのルールを再利用し、私はこのルールを使用する場合、私は以来、私の言語で「記述」を使用することはできませんは、私はANTLR 3.4 .Iで働いていますANTLR

Description: 
'description' 
; 

のような字句解析ルールを定義していますそれは今、キーワードです。私は予約されていないキーワードのルールを書くことができる方法はありますか?文法のルール はlike-

Lexer rule 

Description 
: 
'description' 
; 

Protocol 
: 
'protocol' 
; 
Define 
: 
'define' 
; 
Equal 
: 
'=' 
; 




Parser rule 


mainrule 
: 
Define Protocol stringrule descrule? fields* finishrule 
; 

descrule 
: 
Description? stringrule? 
; 

fields 
: 
type stringrule Equal? stringrule? 

stringrule 
: 
// rule which accept any string 
; 

例になります:私の言語は、IPおよび説明は、プロトコルおよびプロトコルのフィールドです。ここthis-

define protocol description 'Protocol for login' 
int ip=192.168.0.0; 
string description='remote user'; 
finish protocol; 

のように見えている.But(キーワード)で説明しました私はそれがキーワードであるので、フィールド名として 'description'を使うことはできません。

+0

。どこの言語で 'for'をキーワードとして使用したいのですか?文法はどのように見えますか?あなたが意味することのいくつかの例が役に立つでしょう。 –

+0

私は質問を修正しました。お手伝いできますか? – bhavanak

+0

なぜ同じ単語を両方に使用する必要がありますか?属性名に別の単語を使用できませんか?あるいは、特定のキーワード端末を属性名として表示できるように、文法を明示的に記述しますか?私たちはあなたのために完全な文法を書く必要があります。 –

答えて

2

任意のキーワードとあなたのレクサーの識別子ルールstringrule試合を行います。私たちは、より多くのコンテキストを必要とする

stringrule 
: Description 
| Protocol 
| Define 
| Identifier 
; 

Description 
: 'description' 
; 

Protocol 
: 'protocol' 
; 

Define 
: 'define' 
; 

Identifier 
: ('a'..'z' | 'A'..'Z')+ 
; 
+0

ありがとうございました。私の問題を解決しました。 – bhavanak