Class Preprocessor

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class Preprocessor
    extends Object
    implements Closeable
    A C Preprocessor. The Preprocessor outputs a token stream which does not need re-lexing for C or C++. Alternatively, the output text may be reconstructed by concatenating the text values of the returned Tokens. (See CppReader, which does this.)
    • Constructor Detail

      • Preprocessor

        public Preprocessor()
      • Preprocessor

        public Preprocessor​(@Nonnull
                            Source initial)
    • Method Detail

      • setFileSystem

        public void setFileSystem​(@Nonnull
                                  VirtualFileSystem filesystem)
        Sets the VirtualFileSystem used by this Preprocessor.
      • getFileSystem

        @Nonnull
        public VirtualFileSystem getFileSystem()
        Returns the VirtualFileSystem used by this Preprocessor.
      • setListener

        public void setListener​(@Nonnull
                                PreprocessorListener listener)
        Sets the PreprocessorListener which handles events for this Preprocessor. The listener is notified of warnings, errors and source changes, amongst other things.
      • getListener

        @Nonnull
        public PreprocessorListener getListener()
        Returns the PreprocessorListener which handles events for this Preprocessor.
      • getFeatures

        @Nonnull
        public Set<Feature> getFeatures()
        Returns the feature-set for this Preprocessor. This set may be freely modified by user code.
      • addFeature

        public void addFeature​(@Nonnull
                               Feature f)
        Adds a feature to the feature-set of this Preprocessor.
      • addFeatures

        public void addFeatures​(@Nonnull
                                Collection<Feature> f)
        Adds features to the feature-set of this Preprocessor.
      • addFeatures

        public void addFeatures​(Feature... f)
        Adds features to the feature-set of this Preprocessor.
      • getFeature

        public boolean getFeature​(@Nonnull
                                  Feature f)
        Returns true if the given feature is in the feature-set of this Preprocessor.
      • getWarnings

        @Nonnull
        public Set<Warning> getWarnings()
        Returns the warning-set for this Preprocessor. This set may be freely modified by user code.
      • addWarning

        public void addWarning​(@Nonnull
                               Warning w)
        Adds a warning to the warning-set of this Preprocessor.
      • addWarnings

        public void addWarnings​(@Nonnull
                                Collection<Warning> w)
        Adds warnings to the warning-set of this Preprocessor.
      • getWarning

        public boolean getWarning​(@Nonnull
                                  Warning w)
        Returns true if the given warning is in the warning-set of this Preprocessor.
      • addInput

        public void addInput​(@Nonnull
                             Source source)
        Adds input for the Preprocessor. Inputs are processed in the order in which they are added.
      • error

        protected void error​(int line,
                             int column,
                             @Nonnull
                             String msg)
                      throws LexerException
        Handles an error. If a PreprocessorListener is installed, it receives the error. Otherwise, an exception is thrown.
        Throws:
        LexerException
      • warning

        protected void warning​(int line,
                               int column,
                               @Nonnull
                               String msg)
                        throws LexerException
        Handles a warning. If a PreprocessorListener is installed, it receives the warning. Otherwise, an exception is thrown.
        Throws:
        LexerException
      • addMacro

        public void addMacro​(@Nonnull
                             String name,
                             @Nonnull
                             String value)
                      throws LexerException
        Defines the given name as a macro. The String value is lexed into a token stream, which is used as the macro expansion.
        Throws:
        LexerException - if the definition fails or is otherwise illegal.
      • addMacro

        public void addMacro​(@Nonnull
                             String name)
                      throws LexerException
        Defines the given name as a macro, with the value 1. This is a convnience method, and is equivalent to addMacro(name, "1").
        Throws:
        LexerException - if the definition fails or is otherwise illegal.
      • setQuoteIncludePath

        public void setQuoteIncludePath​(@Nonnull
                                        List<String> path)
        Sets the user include path used by this Preprocessor.
      • getQuoteIncludePath

        @Nonnull
        public List<String> getQuoteIncludePath()
        Returns the user include-path of this Preprocessor. This list may be freely modified by user code.
      • setSystemIncludePath

        public void setSystemIncludePath​(@Nonnull
                                         List<String> path)
        Sets the system include path used by this Preprocessor.
      • getSystemIncludePath

        @Nonnull
        public List<String> getSystemIncludePath()
        Returns the system include-path of this Preprocessor. This list may be freely modified by user code.
      • setFrameworksPath

        public void setFrameworksPath​(@Nonnull
                                      List<String> path)
        Sets the Objective-C frameworks path used by this Preprocessor.
      • getFrameworksPath

        @Nonnull
        public List<String> getFrameworksPath()
        Returns the Objective-C frameworks path used by this Preprocessor. This list may be freely modified by user code.
      • getMacros

        @Nonnull
        public Map<String,​Macro> getMacros()
        Returns the Map of Macros parsed during the run of this Preprocessor.
        Returns:
        The Map of macros currently defined.
      • getMacro

        @CheckForNull
        public Macro getMacro​(@Nonnull
                              String name)
        Returns the named macro. While you can modify the returned object, unexpected things might happen if you do.
        Returns:
        the Macro object, or null if not found.
      • push_source

        protected void push_source​(@Nonnull
                                   Source source,
                                   boolean autopop)
        Pushes a Source onto the input stack.
        Parameters:
        source - the new Source to push onto the top of the input stack.
        autopop - if true, the Source is automatically removed from the input stack at EOF.
        See Also:
        getSource(), pop_source()
      • include

        protected boolean include​(@Nonnull
                                  VirtualFile file)
                           throws IOException
        Attempts to include the given file. User code may override this method to implement a virtual file system.
        Parameters:
        file - The VirtualFile to attempt to include.
        Returns:
        true if the file was successfully included, false otherwise.
        Throws:
        IOException - if an I/O error occurs.
      • include

        protected boolean include​(@Nonnull
                                  Iterable<String> path,
                                  @Nonnull
                                  String name)
                           throws IOException
        Attempts to include a file from an include path, by name.
        Parameters:
        path - The list of virtual directories to search for the given name.
        name - The name of the file to attempt to include.
        Returns:
        true if the file was successfully included, false otherwise.
        Throws:
        IOException - if an I/O error occurs.