【发布时间】:2013-10-26 10:44:32
【问题描述】:
希望我的标题并不完全糟糕。我真的不知道这应该叫什么。我正在尝试用 Java 编写一个非常基本的方案解析器。我遇到的问题是实施。
我打开一个文件,我想解析单个令牌:
while(sc.hasNext()) {
System.out.println(sc.next());
}
一般来说,要获得令牌,这很好。但在计划中,识别列表的开始和结束是至关重要的;我的程序的功能取决于此,因此我需要一种处理令牌的方法,例如:
(define
或
poly))
作为多个标记,其中任何括号都是它自己的标记:
(
define
poly
)
)
如果我能做到这一点,我可以正确识别要添加到我的符号表中的不同符号,并且知道何时/如何将节点添加到我的分析树中。
Java API 表明扫描器类没有任何方法可以完全按照我的意愿进行操作。我能想到的最接近的事情是使用括号作为自定义分隔符,这将使每个标记足够干净,以便我的逻辑更容易识别,但是我的括号会发生什么?
我正在考虑的另一种方法是放弃 Java 标记器,而是逐个字符地扫描,直到找到完整的符号。
我该怎么办?尝试解决 Java 扫描器方法,还是只使用逐个字符的方法?
【问题讨论】:
-
不仅是空格和括号,还有各种引号。基于分隔符的扫描在那里不起作用。
-
@WillNess 这些链接如果不是那么先进会更有帮助。我正在研究的程序是编译器设计的必备课程,这甚至不是我大学的必修课程。我现在也明白我不能使用基于分隔符的方法,所以我认为基于字符的方法是我唯一的选择......
-
看起来像;您总是可以为基本语法制作一些临时的东西(例如,不识别高级数字语法,例如(基数等))。或者甚至没有反引号。
-
@WillNess 这是我和我的搭档采取的方法。代码有点复杂,可能效率有点低,但它确实有效。除了识别保留字和一些语法之外,该分配不需要太多。现在我只需要写剩下的......
标签: java string parsing scheme