Mercurial Hosting > luan
view core/src/luan/impl/Parser.java @ 287:4d53e9fc1bd9
change lucene search to take lucene objects
git-svn-id: https://luan-java.googlecode.com/svn/trunk@288 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Thu, 04 Dec 2014 09:27:20 +0000 |
parents | 82a3ebcfbafa |
children | 859c0dedc8b6 |
line wrap: on
line source
package luan.impl; import luan.LuanSource; final class Parser { private final LuanSource src; public final String text; private final int len; private int[] stack = new int[256]; private int frame = 0; private int iHigh; public Parser(LuanSource src) { this.src = src; this.text = src.text; this.len = text.length(); } private int i() { return stack[frame]; } private void i(int i) { stack[frame] += i; if( iHigh < stack[frame] ) iHigh = stack[frame]; } public int begin() { frame++; if( frame == stack.length ) { int[] a = new int[2*frame]; System.arraycopy(stack,0,a,0,frame); stack = a; } stack[frame] = stack[frame-1]; return i(); } public void rollback() { stack[frame] = stack[frame-1]; } public <T> T success(T t) { success(); return t; } public boolean success() { frame--; stack[frame] = stack[frame+1]; return true; } public <T> T failure(T t) { failure(); return t; } public boolean failure() { frame--; return false; } public ParseException exception(String msg) { return new ParseException(msg,src,i(),iHigh); } public ParseException exception() { return exception("Invalid input"); } public int currentIndex() { return i(); } public char lastChar() { return text.charAt(i()-1); } public char currentChar() { return text.charAt(i()); } public boolean endOfInput() { return i() >= len; } public boolean match(char c) { if( endOfInput() || text.charAt(i()) != c ) return false; i(1); return true; } public boolean match(String s) { int n = s.length(); if( !text.regionMatches(i(),s,0,n) ) return false; i(n); return true; } public boolean matchIgnoreCase(String s) { int n = s.length(); if( !text.regionMatches(true,i(),s,0,n) ) return false; i(n); return true; } public boolean anyOf(String s) { if( endOfInput() || s.indexOf(text.charAt(i())) == -1 ) return false; i(1); return true; } public boolean noneOf(String s) { if( endOfInput() || s.indexOf(text.charAt(i())) != -1 ) return false; i(1); return true; } public boolean inCharRange(char cLow, char cHigh) { if( endOfInput() ) return false; char c = text.charAt(i()); if( !(cLow <= c && c <= cHigh) ) return false; i(1); return true; } public boolean anyChar() { if( endOfInput() ) return false; i(1); return true; } public boolean test(char c) { return !endOfInput() && text.charAt(i()) == c; } public boolean test(String s) { return text.regionMatches(i(),s,0,s.length()); } public String textFrom(int start) { return text.substring(start,i()); } }