希望我的头衔不是很糟糕。我真的不知道应该叫什么。我正在尝试用Java编写一个非常基本的方案解析器。我遇到的问题是实施。
我打开一个文件,我想解析单个令牌:
while(sc.hasNext()) {
System.out.println(sc.next());
}
一般来说,要获得令牌,这很好。但在计划中,认识到清单的开头和结尾是至关重要的;我的程序的功能取决于此,所以我需要一种方法来处理令牌,如:
(define
或
poly))
作为多个令牌,其中任何括号都是其自己的令牌:
(
define
poly
)
)
如果我能做到这一点,我可以正确识别要添加到我的symtab的不同符号,并知道何时/如何将节点添加到我的解析树。
Java API显示,扫描程序类没有任何方法可以完全按照我的意愿执行操作。我能想到的最接近的事情是使用parantheses作为自定义分隔符,这将使每个令牌足够清晰,以便我的逻辑更容易识别,但那么我的括号会发生什么?
我正在考虑的另一种方法是放弃Java标记化器,只是按字符扫描char,直到找到完整的符号。
我该怎么办?尝试解决Java扫描程序方法,或者只是逐字符处理?
答案 0 :(得分:1)
首先,您需要直截了当地学习术语。 (define
不是一个令牌;它是(
令牌,后跟define
令牌。同样,poly))
不是单个令牌,而是三个。
不要让java.util.Scanner
(这就是你正在使用的,对吧?)扔你一个循环 - 当你说“一般来说,得到令牌,这很好”,我说不,这是不。如果还不够,不要满足于提供的东西。
为了正确地标记Scheme代码,我希望你至少能够处理常规语言。使用Scanner
可能非常困难,所以这里有几个选择: