如何在令牌 JavaCC 中排除字符 "
How to exclude character " in a token JavaCC
您好,我正在使用 JavaCC,我正在编写一个标记,将一个字符串放在“”之间。上下文:
void literalString(): {} { """ (characteresString())? """ }
void characteresString(): {} { <characterString> | characteresString() <characterString> }
所以我制作了这个令牌来放置一个字符串:
TOKEN : {<characterString : ~["\", "] >}
问题是我不知道如何排除令牌中的 " 符号,如果我输入 """ 它会出错,如果我再次输入一个 " 则出错。
提前致谢
而不是
void literalString(): {} { """ (characteresString())? """ }
使用令牌定义
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR : ~["\""] > // Any character that is not "
}
现在这将字符串定义为 "
,后跟零个或多个非 "
的字符,再后跟另一个 "
.
然而,某些语言有进一步的限制,例如只允许特定范围内的字符。例如,如果只允许打印 ascii 字符,但不包括 "
s,那么您将使用
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR: [" ","!","#"-"~"]> // Printable ASCII characters excluding "
}
但是,如果前面有 \
,你想允许 "
个字符,并且你想禁止 \
个字符,除非它们后面跟着 "
] 或另一个 \
或 n
。那么你可以使用
TOKEN : { <STRING : "\"" (<CHAR> | <ESCAPESEQ>)* "\"" >
| <#CHAR: [" ","!","#"-"[","]"-"~"] > // Printable ASCII characters excluding \ and "
| <#ESCAPESEQ: "\" ["\"","\","n"] > // 2-character sequences \, \", and \n
}
您好,我正在使用 JavaCC,我正在编写一个标记,将一个字符串放在“”之间。上下文:
void literalString(): {} { """ (characteresString())? """ }
void characteresString(): {} { <characterString> | characteresString() <characterString> }
所以我制作了这个令牌来放置一个字符串:
TOKEN : {<characterString : ~["\", "] >}
问题是我不知道如何排除令牌中的 " 符号,如果我输入 """ 它会出错,如果我再次输入一个 " 则出错。
提前致谢
而不是
void literalString(): {} { """ (characteresString())? """ }
使用令牌定义
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR : ~["\""] > // Any character that is not "
}
现在这将字符串定义为 "
,后跟零个或多个非 "
的字符,再后跟另一个 "
.
然而,某些语言有进一步的限制,例如只允许特定范围内的字符。例如,如果只允许打印 ascii 字符,但不包括 "
s,那么您将使用
TOKEN : { <STRING : "\"" (<CHAR>)* "\"" >
| <#CHAR: [" ","!","#"-"~"]> // Printable ASCII characters excluding "
}
但是,如果前面有 \
,你想允许 "
个字符,并且你想禁止 \
个字符,除非它们后面跟着 "
] 或另一个 \
或 n
。那么你可以使用
TOKEN : { <STRING : "\"" (<CHAR> | <ESCAPESEQ>)* "\"" >
| <#CHAR: [" ","!","#"-"[","]"-"~"] > // Printable ASCII characters excluding \ and "
| <#ESCAPESEQ: "\" ["\"","\","n"] > // 2-character sequences \, \", and \n
}