#!/usr/bin/env --split-string=${JDK_HOME}/bin/java @building/Makeshift/java_arguments @building/Makeshift/java_javac_arguments package Breccia.parser.plain; import Breccia.parser.*; import java.io.IOException; import java.io.Reader; import java.nio.file.Path; import static Breccia.parser.plain.Project.newSourceReader; import static java.lang.System.out; /** A shell command to smoke test the plain Breccia parser. * * @see * Usage instructions */ public final class SmokeTestCommand { private SmokeTestCommand() {} public static void main( final String[] arguments ) throws IOException { final Path sourceFile = Path.of( arguments[0] ); final BrecciaCursor in = new BrecciaCursor(); try( final Reader sourceReader = newSourceReader​( sourceFile )) { in.source( sourceReader ); for( ;; ) { final ParseState state = in.state(); final Fractum f = in.asFractum(); if( f != null ) { // out.println( f ); // final CommandPoint p = in.asCommandPoint(); // if( p != null ) { // // out.println( p ); // out.println( p.tagName() ); // out.println( p.modifierSet() ); // out.println( p.appendageClause() ); // ; } out.println( f.tagName() ); printComponentsOf( f, " " ); ; } else { out.print( " " ); out.println( state ); } if( state.isFinal() ) break; in.next(); }} catch( final ParseError x ) { out.print( sourceFile ); out.print( ':' ); out.print( x.lineNumber ); out.print( ": " ); out.println( x ); } // x.printStackTrace( out ); } catch( final IllegalParseState x ) { out.print( sourceFile ); out.print( ':' ); out.print( x.pointer.lineNumber ); out.print( ": " ); out.println( x ); }} // x.printStackTrace( out ); }} private static void printComponentsOf( final Granum granum, final String indent ) throws ParseError { for( final Granum component: granum.components() ) { out.print( indent ); // out.println( component.tagName() ); out.println( component ); printComponentsOf( component, indent + " " ); }}}