2016-07-19 12 views
3

Ich arbeite mit ANTLR 3.4 .I habe eine Lexer Regel definiert wieReuse eine reservierte Schlüsselwort Regel in ANTLR

Description: 
'description' 
; 

Wenn ich diese Regel verwenden, werde ich nicht in der Lage sein, ‚Beschreibung‘ in meiner Sprache zu verwenden, da es ist jetzt ein Schlüsselwort. Gibt es irgendeine Weise, durch die ich eine Regel für nicht reserviertes Schlüsselwort schreiben kann. Die Regeln in der Grammatik sieht wie-

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 
; 

Beispiel: Meine Sprache wie this- ip und Beschreibung hier

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

sieht Felder Protokoll und Protokoll sind, wird mit Beschreibung .Aber (das Schlüsselwort) Ich kann "Beschreibung" nicht als Feldnamen verwenden, da es ein Schlüsselwort ist.

+0

Wir mehr Kontext benötigen. Wo in der Sprache würden Sie 'for' als kein Schlüsselwort verwenden? Wie würde die Grammatik aussehen? Einige Beispiele dafür, was du meinst, wären hilfreich. –

+0

Ich habe die Frage geändert. Können Sie bitte helfen. – bhavanak

+0

Warum brauchen Sie genau das gleiche Wort für beide? Kannst du kein anderes Wort für den Attributnamen verwenden? Oder schreiben Sie explizit Ihre Grammatik, damit bestimmte Keyword-Terminals als Attributnamen angezeigt werden? Sie müssen die vollständige Grammatik für Ihr Beispiel schreiben, damit wir etwas haben können. –

Antwort

2

Machen stringrule Spiel jede Keyword und Ihre Lexer Kennung Regel:

stringrule 
: Description 
| Protocol 
| Define 
| Identifier 
; 

Description 
: 'description' 
; 

Protocol 
: 'protocol' 
; 

Define 
: 'define' 
; 

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

Danke ..das hat mein Problem gelöst. – bhavanak