Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Token nextToken() {
- while (-1 != cur.getCp()) {
- while (cur.isWhiteSpace() || cur.isNewLine())
- cur.nxt();
- Position start = cur.copy(); //avoid referencing object (otherwise changing 'cur' also changes 'start')
- switch (cur.getCp()) {
- case '/':
- cur.nxt();
- if ('*' != cur.getCp()) {
- Position curCopy = cur.copy();
- compiler.addMessage(true, curCopy, "unexpected character in comment: '" +
- program.substring(cur.getIndex(), cur.getIndex() + 1) + "' found, '*' expected");
- }
- do {
- do {
- cur.nxt();
- } while ('*' != cur.getCp() && -1 != cur.getCp());
- cur.nxt();
- } while ('/' != cur.getCp() && -1 != cur.getCp());
- if (-1 == cur.getCp())
- compiler.addMessage(true, cur, "end of program found, '*/' expected");
- cur.nxt();
- Position curCopy = cur.copy();
- comments.add(new Fragment(start, curCopy));
- break;
- default:
- if (cur.isLetterOrDigit()) {
- //string.matches("^(([a-z]{1}[0-9]{1})*[a-z]?)|(([0-9]{1}[a-z]{1})*[0-9]?)");
- String tmp = "";
- String idtName = "";
- boolean letter = false, digit = false, mark = true;
- if (cur.isLetter()) digit = true;
- if (cur.isDigit()) letter = true;
- while (cur.isLetterOrDigit()) {
- //cur.nxt();
- tmp = program.substring(start.getIndex(), cur.getIndex());
- if (tmp.equals("for") || tmp.equals("if") || tmp.equals("m1")) {
- KeyToken keytok = new KeyToken(start, cur);
- System.out.println(keytok.toString() + tmp);
- return keytok;
- }
- if (cur.isLetter()) {
- if (digit) {
- letter = true;
- digit = false;
- idtName += (char)(cur.getCp());
- mark = true;
- //System.out.println("i:" + idtName);
- cur.nxt();
- continue;
- }
- if (letter) {
- mark = false;
- break;
- //compiler.addMessage(true, start.copy(), "unexpected character in ident");
- }
- }
- if (cur.isDigit()) {
- if (letter) {
- letter = false;
- digit = true;
- idtName += (char)(cur.getCp());
- mark = true;
- //System.out.println("i:" + idtName);
- cur.nxt();
- continue;
- }
- if (digit) {
- mark = false;
- break;
- //compiler.addMessage(true, start.copy(), "unexpected character in ident");
- }
- }
- cur.nxt();
- }
- if (mark) {
- IdentToken tok = new IdentToken(compiler.addName(idtName), start, cur);
- System.out.println(tok.toString() + idtName);
- //cur.nxt();
- return tok;
- }
- compiler.addMessage(true, cur.copy(), "unexpected character in ident");
- /*if (tmp.matches("^(([a-z]{1}[0-9]{1})*[a-z]?)|(([0-9]{1}[a-z]{1})*[0-9]?)")) {
- String identName = program.substring(start.getIndex(), cur.getIndex());
- IdentToken tok = new IdentToken(compiler.addName(identName), start, cur);
- System.out.println(tok.toString() + identName);
- cur.nxt();
- return tok;
- }*/
- //Position cur2 = cur.copy();
- //compiler.addMessage(true, start, "unexpected character in ident");
- }
- break;
- }
- cur.nxt();
- }
- return null;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement