【发布时间】:2017-05-07 00:28:20
【问题描述】:
我正在构建一个编译器。其中一些规格如下:
- 字符串文字用美元符号 ("$") 括起来 - 例如。 $ 字符串示例 $
- 注释用“*”括起来 - 例如。 * 示例评论 *
- 注释可以存在于任何地方,除了操作之间 - 例如。 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
我想知道获得此信息的最有效方法。请注意,我仍然必须验证字符串文字和注释的出现。 (例如,检查是否正确封闭)。到目前为止,我的方法是用空格分隔每一行,并且当词位包含“$”或“*”时,我将验证字符串文字。这是我的实现:
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;
}
}
感谢您的帮助。
【问题讨论】:
-
您对手动词法分析感兴趣吗?您可以使用许多词法分析器/解析器生成器来专注于更高级别的部分。
-
是的。你说对了。我对手工进行词法分析很感兴趣。
-
但是我们不允许使用二级库。
-
我认为我们可以使用标准库分词器。让我检查一下。谢谢。
标签: java regex string split compiler-construction