JavaCCを利用して、「 -{ 」と「 }- 」で囲んだ文字列を取得する
JavaCCを利用して、「 -{ 」と「 }- 」で囲んだ文字列を取得する時の方法。
「 /* 」と「 */ 」に置き換えれば、C言語の複数行コメントの中身を取得するときに利用できる。
SPECIAL_TOKENに、「 -{ 」と「 }- 」で囲まれる文字列を指定するのが肝要。SPECIAL_TOKENで指定したパターンにヒットした文字列は、その後にヒットしたTokenで
(Token名).specialToken.image
を呼び出すことで取得できる。
jjtファイル
options { //(略) UNICODE_INPUT=true; //日本語が扱えるようにUnicodeの入力にする //(略) } // (前略) TOKEN: { <NATIVE_CODE_START: "-{" (" ")? >: NATIVE_CODE // -{ にマッチ } <NATIVE_CODE> TOKEN : { <NATIVE_CODE_END: (" ")? "}-" >: DEFAULT // }- にマッチ } <NATIVE_CODE> SPECIAL_TOKEN: { <NATIVE_CODE_BLOCK: (~["}"] | "}" ~["-"])+ > // }- 以外にマッチ } // (中略) //ノード生成部 void NativeCodeBlock(): { Token t; } { // native code block is a SPECIAL_TOKEN, so we need to get it from NATIVE_CODE_END <NATIVE_CODE_START> t=<NATIVE_CODE_END> { jjtThis.jjtSetValue(t.specialToken.image); } Type() }
参考:
hlang/HLisp.jjt at 630a4a439f507729cc8c4833cd37e91e1b8e96f2 · hrehfeld/hlang · GitHub