From: <fwi...@us...> - 2011-03-26 16:21:44
|
Revision: 7268 http://jython.svn.sourceforge.net/jython/?rev=7268&view=rev Author: fwierzbicki Date: 2011-03-26 16:21:37 +0000 (Sat, 26 Mar 2011) Log Message: ----------- Update to latest antlr for sandbox testing + other updates. Modified Paths: -------------- trunk/sandbox/wierzbicki/antlr/build.xml trunk/sandbox/wierzbicki/antlr/grammar/Python.g trunk/sandbox/wierzbicki/antlr/run trunk/sandbox/wierzbicki/antlr/src/Main.java trunk/sandbox/wierzbicki/antlr/src/PythonTokenSource.java Removed Paths: ------------- trunk/sandbox/wierzbicki/antlr/lib/antlr-2.7.7.jar trunk/sandbox/wierzbicki/antlr/lib/antlr-3.1.jar trunk/sandbox/wierzbicki/antlr/lib/antlr-runtime-3.1.jar trunk/sandbox/wierzbicki/antlr/lib/stringtemplate-3.2.jar Modified: trunk/sandbox/wierzbicki/antlr/build.xml =================================================================== --- trunk/sandbox/wierzbicki/antlr/build.xml 2011-03-25 15:25:07 UTC (rev 7267) +++ trunk/sandbox/wierzbicki/antlr/build.xml 2011-03-26 16:21:37 UTC (rev 7268) @@ -8,22 +8,22 @@ </path> <target name="init"> - <mkdir dir="build/gensrc/org/python/antlr/ast"/> + <mkdir dir="build/gensrc"/> </target> <target name="antlr_gen" depends="init"> <java classname="org.antlr.Tool"> <arg value="-fo"/> - <arg path="build/gensrc/org/python/antlr"/> + <arg path="build/gensrc"/> <arg value="-lib"/> - <arg path="build/gensrc/org/python/antlr"/> + <arg path="build/gensrc"/> <arg file="grammar/Python.g"/> <classpath refid="main.classpath"/> </java> <!-- copy the .tokens to /grammar, for usage in ANTLRWorks --> <copy todir="grammar" preservelastmodified="true"> - <fileset dir="build/gensrc/org/python/antlr"> + <fileset dir="build/gensrc"> <include name="Python.tokens" /> </fileset> </copy> Modified: trunk/sandbox/wierzbicki/antlr/grammar/Python.g =================================================================== --- trunk/sandbox/wierzbicki/antlr/grammar/Python.g 2011-03-25 15:25:07 UTC (rev 7267) +++ trunk/sandbox/wierzbicki/antlr/grammar/Python.g 2011-03-26 16:21:37 UTC (rev 7268) @@ -69,6 +69,7 @@ tokens { INDENT; DEDENT; + TRAILBACKSLASH; //For dangling backslashes when partial parsing. } @lexer::members { Deleted: trunk/sandbox/wierzbicki/antlr/lib/antlr-2.7.7.jar =================================================================== (Binary files differ) Deleted: trunk/sandbox/wierzbicki/antlr/lib/antlr-3.1.jar =================================================================== (Binary files differ) Deleted: trunk/sandbox/wierzbicki/antlr/lib/antlr-runtime-3.1.jar =================================================================== (Binary files differ) Deleted: trunk/sandbox/wierzbicki/antlr/lib/stringtemplate-3.2.jar =================================================================== (Binary files differ) Modified: trunk/sandbox/wierzbicki/antlr/run =================================================================== --- trunk/sandbox/wierzbicki/antlr/run 2011-03-25 15:25:07 UTC (rev 7267) +++ trunk/sandbox/wierzbicki/antlr/run 2011-03-26 16:21:37 UTC (rev 7268) @@ -1 +1 @@ -java -classpath lib/antlr-3.1.jar:build Main /home/frank/svn/python/release26-maint +java -classpath lib/antlr-runtime-3.3.jar:build Main /home/frank/svn/python/release26-maint Modified: trunk/sandbox/wierzbicki/antlr/src/Main.java =================================================================== --- trunk/sandbox/wierzbicki/antlr/src/Main.java 2011-03-25 15:25:07 UTC (rev 7267) +++ trunk/sandbox/wierzbicki/antlr/src/Main.java 2011-03-26 16:21:37 UTC (rev 7268) @@ -42,7 +42,7 @@ CharStream input = new ANTLRFileStream(path); PythonLexer lexer = new MyLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); - tokens.discardOffChannelTokens(true); + //tokens.discardOffChannelTokens(true); PythonTokenSource indentedSource = new PythonTokenSource(tokens, "<test>"); tokens = new CommonTokenStream(indentedSource); PythonParser parser = new PythonParser(tokens); Modified: trunk/sandbox/wierzbicki/antlr/src/PythonTokenSource.java =================================================================== --- trunk/sandbox/wierzbicki/antlr/src/PythonTokenSource.java 2011-03-25 15:25:07 UTC (rev 7267) +++ trunk/sandbox/wierzbicki/antlr/src/PythonTokenSource.java 2011-03-26 16:21:37 UTC (rev 7268) @@ -79,7 +79,7 @@ int sp=-1; // grow upwards /** The queue of tokens */ - Vector tokens = new Vector(); + Vector<Token> tokens = new Vector<Token>(); /** We pull real tokens from this lexer */ CommonTokenStream stream; @@ -130,7 +130,7 @@ public Token nextToken() { // if something in queue, just remove and return it if (tokens.size() > 0) { - Token t = (Token)tokens.firstElement(); + Token t = tokens.firstElement(); tokens.removeElementAt(0); //System.out.println(filename + t); return t; @@ -142,25 +142,43 @@ } private void generateNewline(Token t) { + //System.out.println("generating newline from token: " + t); CommonToken newline = new CommonToken(PythonLexer.NEWLINE, "\n"); newline.setLine(t.getLine()); newline.setCharPositionInLine(t.getCharPositionInLine()); tokens.addElement(newline); } + private void handleEOF(CommonToken eof, CommonToken prev) { + //System.out.println("processing eof with token: " + prev); + if (prev != null) { + eof.setStartIndex(prev.getStopIndex()); + eof.setStopIndex(prev.getStopIndex()); + eof.setLine(prev.getLine()); + eof.setCharPositionInLine(prev.getCharPositionInLine()); + } + } + protected void insertImaginaryIndentDedentTokens() { Token t = stream.LT(1); stream.consume(); if (t.getType() == Token.EOF) { + Token prev = stream.LT(-1); + handleEOF((CommonToken)t, (CommonToken)prev); if (!inSingle) { - Token prev = stream.LT(-1); - if (prev == null || prev.getType() != PythonLexer.NEWLINE) { + if (prev == null) { generateNewline(t); + } else if (prev.getType() == PythonLexer.LEADING_WS) { + handleDedents(-1, (CommonToken)t); + generateNewline(t); + } else if (prev.getType() != PythonLexer.NEWLINE) { + generateNewline(t); + handleDedents(-1, (CommonToken)t); } + } else { + handleDedents(-1, (CommonToken)t); } - - handleDedents(-1, (CommonToken)t); enqueue(t); } else if (t.getType() == PythonLexer.NEWLINE) { // save NEWLINE in the queue @@ -173,11 +191,12 @@ t = stream.LT(1); stream.consume(); - enqueueHiddens(t); + List<Token> commentedNewlines = enqueueHiddens(t); // compute cpos as the char pos of next non-WS token in line int cpos = t.getCharPositionInLine(); // column dictates indent/dedent if (t.getType() == Token.EOF) { + handleEOF((CommonToken)t, (CommonToken)newline); cpos = -1; // pretend EOF always happens at left edge } else if (t.getType() == PythonLexer.LEADING_WS) { @@ -207,6 +226,9 @@ for(int i=1;i<newlines.length();i++) { generateNewline(newline); } + for (Token c : commentedNewlines) { + generateNewline(c); + } } if (t.getType() != PythonLexer.LEADING_WS) { // discard WS @@ -223,7 +245,8 @@ tokens.addElement(t); } - private void enqueueHiddens(Token t) { + private List<Token> enqueueHiddens(Token t) { + List<Token> newlines = new ArrayList<Token>(); if (inSingle && t.getType() == Token.EOF) { if (stream.size() > lastTokenAddedIndex + 1) { Token hidden = stream.get(lastTokenAddedIndex + 1); @@ -231,25 +254,28 @@ String text = hidden.getText(); int i = text.indexOf("\n"); while(i != -1) { - generateNewline(hidden); + newlines.add(hidden); i = text.indexOf("\n", i + 1); } } } } - List hiddenTokens = stream.getTokens(lastTokenAddedIndex + 1,t.getTokenIndex() - 1); + List<Token> hiddenTokens = stream.getTokens(lastTokenAddedIndex + 1,t.getTokenIndex() - 1); if (hiddenTokens != null) { tokens.addAll(hiddenTokens); } lastTokenAddedIndex = t.getTokenIndex(); + return newlines; } private void handleIndents(int cpos, CommonToken t) { push(cpos); //System.out.println("push("+cpos+"): "+stackString()); - Token indent = new CommonToken(PythonParser.INDENT,""); + CommonToken indent = new CommonToken(PythonParser.INDENT,""); indent.setCharPositionInLine(t.getCharPositionInLine()); indent.setLine(t.getLine()); + indent.setStartIndex(t.getStartIndex() - 1); + indent.setStopIndex(t.getStartIndex() - 1); tokens.addElement(indent); } @@ -263,9 +289,8 @@ dedent.setCharPositionInLine(t.getCharPositionInLine()); dedent.setLine(t.getLine()); - //XXX: this will get messed up by comments. - dedent.setStartIndex(t.getStartIndex()); - dedent.setStopIndex(t.getStopIndex()); + dedent.setStartIndex(t.getStartIndex() - 1); + dedent.setStopIndex(t.getStartIndex() - 1); tokens.addElement(dedent); } @@ -306,11 +331,8 @@ if (i == -1 || i == -2) { return FIRST_CHAR_POSITION; } - /* ParseException p = new ParseException("unindent does not match any outer indentation level", t.getLine(), t.getCharPositionInLine()); - p.setType(Py.IndentationError); + RuntimeException p = new RuntimeException("unindent does not match any outer indentation level");//, t.getLine(), t.getCharPositionInLine()); throw p; - */ - throw new RuntimeException("unindent does not match any outer indentation level"); } public String stackString() { @@ -322,7 +344,6 @@ return buf.toString(); } - //FIXME: needed this for the Antlr 3.1b interface change. public String getSourceName() { return filename; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |