2014-03-31 2 views
6

Wir haben unsere eigene Skriptsprache, die wir verwenden. Die Sprache ist ziemlich einfach, aber es hat eine "exklusive" Sache: Strings werden mit '[' und ']' definiert (also wäre "test" [test]), und diese Klammern können ineinander sein:Rekursive Blöcke in Ace-Editor

lateinit([concat([test], [blah])]) 

Auch gibt es keine entkommen Charakter. Wie analysiert man diesen Block als eine Zeichenkette (wodurch der Block [concat([test], [blah])] hervorgehoben wird)? Ich habe zur Zeit die folgenden Regel:

 { token: 'punctuation.definition.string.begin.vcl', 
     regex: '\\[', 
     push: 
     [ 
      { token: 'punctuation.definition.string.end.vcl', 
      regex: '\\]', 
      next: 'pop' }, 
      { defaultToken: 'string.quoted.other.vcl' } ], 
     }, 

Aber, wie Sie erraten haben könnten, diese an Klammer am Ende des Tests zu stoppen: "[ concat ([test ], [bla] ‚)] ...

Andere Beispiele sind:

setexpratt(1, [if(comparetext([yes], [no]), msg([test expression]))]); 
terminator([confirm([Are you sure you want to exit?])]); 
registerfunction([testfunction], 1, 3, [], [msg(concat([Argument 1: ], p(1), [, Argument 2: ], p(2), [, Argument 3: ], p(3)))]); 
+0

Was ist der Zweck der Verschachtelung? –

+0

@ExplosionPills Es ist die Syntax; Es gibt kein fliehendes Zeichen ... Das Beispiel, das ich angegeben habe, führt den Code aus, der gegeben wurde, nachdem ein Objekt geladen wurde. Also wird der 'concat ([Test], [blah])' erneut analysiert und dann ausgeführt. – Diamondo25

+0

Irgendwelche Art von Bedingungen in diesem Json Ding? –

Antwort

4

Sie müssen Regel hinzufügen für [ in den inneren String Zustand, versuchen

this.$rules = { 
    start: [ 
     { token: 'string.begin.vcl', regex: '\\[', push: "string" } 
    ], 
    string : [ 
     { token: 'string.begin.vcl', regex: '\\[', push: "string" }, 
     { token: 'string.end.vcl', regex: '\\]', next: 'pop' }, 
     { defaultToken: 'string.quoted.other.vcl' }, 
    ] 
}; 
this.normalizeRules(); 
+0

Danke, das hat den Job gemacht:). Ich wusste, dass es fortgeschrittener war, als ich dachte, haha – Diamondo25