public class Lexer
extends java.lang.Object
The first method is called scannerLexer
, and is based on using a Scanner
.
The second method is called splitLexer
, which uses String.split(String)
.
The third method is call tokenizerLexer
and is based on an object called StringTokenizer
.
created by Chris Wilcox Spring17
modified by rbecwar
and garethhalladay
Fall17
Constructor and Description |
---|
Lexer() |
Modifier and Type | Method and Description |
---|---|
static java.util.List<java.lang.String> |
scannerLexer(java.lang.String expr)
Lex a String using an instance of Scanner.
|
static java.util.List<java.lang.String> |
splitLexer(java.lang.String expr)
Parse a String using
String.split(String) . |
public static java.util.List<java.lang.String> scannerLexer(java.lang.String expr)
Initialize a Scanner
object with a String
argument containing the expression.
Using the Scanner.hasNext()
and Scanner.next()
methods:
String
(using whitespace as your delimiter)
ArrayList
After implementing this approach, examine the results.
This approach seems to have trouble unless there is white space between every token. Is this fixable or is the Scanner approach not a good idea?
expr
- a String in the form of an expressionpublic static java.util.List<java.lang.String> splitLexer(java.lang.String expr)
String.split(String)
.
Invoke the String.split(String)
method on the String containing the expression.
Remember that split returns an array of strings that you must iterate.
Note that the method takes a regular expression, which we have not studied yet. As an introduction,
you should check out the provided links and try to understand what the following expressions are
matching.
Try passing the regular expression "[-+*()/]"
the split method to see what happens.
It seems to match everything, but it removes the operators and parentheses.
Is the String.split(String)
approach fixable?
Hint: Try this regular expression: "(?<=[-+*()/])|(?=[-+*()/])"
.
This uses the lookahead and lookbehind operators, an advanced regex feature.
Use the String.trim()
method to remove whitespace in each token.
expr
- a string in the form of an expressionString.split(String)