我正在构建一个编译器。一些这方面的规格如下:使用自定义正则表达式分割字符串java
- 字符串文本是由美元符号(“$”)封闭 - 如。 $ string sample $
- 评论包含在“*”中 - 例如。 *样品评论*
- 评论可能存在任何地方,除了操作之间 - 例如。 4 + *样品评论* 5 - (这是不允许的)
现在我必须拆分源代码行来标记它。 例案例:
PRINT $ THE FLOAT IS $ * DISPLAY THE RESULT *
当我将它记号化,它应该产生:
PRINT - token is KEYWORD
THE FLOAT IS - token is STRING_LITERAL
DISPLAY THE RESULT - token is COMMENT
我想知道最有效的方式获得此。请注意,我仍然需要验证字符串文字和注释的发生。 (例如检查它是否正确封闭)。到目前为止,我的方法是用whitespaces分割每一行,并且当一个词位包含“$”或“*”时,我将验证字符串文字。这里是我的实施:
private void getLexemes(){
for(String line : newSourceCode){
String[] lexemesInALine = line.trim().split("[\\s]+");
for(String lexemeInALine : lexemesInALine){
if(!(lexemeInALine.contains("$"))){
lexemes.add(lexemeInALine);
tempTokens.add(findToken(lexemeInALine));
line = line.replaceFirst(lexemeInALine,"").trim();
}else{
validateStringType(line);
break;
}
}
谢谢你的帮助。
您是否有兴趣在词法手?有许多词法分析器/解析器生成器可用于专注于更高级别的部分。 – 9000
是的。你说对了。我有兴趣手工打扫。 –
但我们不允许使用辅助库。 –