2016-09-20 49 views
-6

我有一些理论上的想法,但我不太了解这门语言。我们基本上需要制作一个基本的词法分析器。我有大部分的位,但这里是上下文。直接的问题在最后。在Java中解析

我需要从控制台线阅读,然后看看是否匹配的部件了一个符号表,其中包括关键字:"print [variable]""load [variable]""mem [variable]""sqrt""stop",以及数学符号。

它也需要认识到自己的变量(如"c = a + b"为好。)

所以......它并不难,在理论上。您将检查与关键字或变量匹配的字符串的第一个字符。如果他们这样做,继续循环通过该关键字或变量来检查它是否是相同的字符串,直到你遇到一个空间。

总结:如何检查字符串中的字符与Java中的字符进行比较?

+0

'String.charAt()'和'StringTokenizer'会让你开始。 – markspace

+0

ty我会将这些添加到我的笔记中。 –

回答

0

我建议使用正则表达式进行文本模式匹配。您通过控制台收到文本作为参数,您可以使用main-methodargs数组。这里有一个小例子:

public final class Parser { 
    public static void main(final String[] args) { 
     if (args.length < 1) { 
      // Error, no input given 
     } 

     String input = args[0]; 

     Pattern pattern = Pattern.compile("YOUR REGEX HERE"); 
     Matcher matcher = pattern.matcher(input); 

     if (matcher.find()) { 
      // Input matches the Regex pattern 
      // Access to capturing groups using matcher.group(int) 
      // Example: System.out.println(matcher.group(1)); 
     } 
    } 
} 

对于正则表达式你可以在网络上找到和SO各种解释。你可以在regex101试试你的模式。

这里的相匹配 “名称=名+名称” 的一个例子的模式:

(.+) = (.+) \+ (.+) 

()创建捕获组。使用matcher.group(x)x1 to 3您可以访问括号内的匹配值,即变量。
下面是与测试输入相同的示例:regex101.com/r/mJ9jI5/1

相当简单。但是,您可能需要使pattern更健壮。它可能不接受变量名称内的whitespace字符或特殊字符(例如+)等。

+0

嗯。我喜欢。我会在早上看看细节。我很感激。 –