Module: java-parser Author: Gail Zacharias Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND define constant $public-modifier = 1; define constant $protected-modifier = 2; define constant $private-modifier = 4; define constant $static-modifier = 8; define constant $abstract-modifier = 16; define constant $final-modifier = 32; define constant $native-modifier = 64; define constant $synchronized-modifier = 128; define constant $transient-modifier = 256; define constant $volatile-modifier = 512; define constant = limited(, min: 0, max: 1023); define abstract class () constant slot import-name :: , required-init-keyword: name:; end; define grammar-sequence (); define class () end; define class () end; define abstract class () constant slot declaration-modifiers :: , required-init-keyword: modifiers:; end; define abstract class () end; define grammar-sequence (); define generic declaration-body (decl :: ) => (body :: false-or()); define method declaration-body (decl :: ) => (body :: singleton(#f)) #f end; define abstract class () constant slot type-declaration-name :: , required-init-keyword: name:; constant slot type-declaration-declarations :: , required-init-keyword: body:; end; define grammar-sequence (); define class () constant slot parameter-name :: , required-init-keyword: name:; constant slot parameter-type :: , required-init-keyword: type:; end; define grammar-sequence (); define class () constant slot variable-declarator-name :: , required-init-keyword: name:; constant slot variable-declarator-numdims :: , // number of []'s required-init-keyword: numdims:; constant slot variable-declarator-init :: false-or(), required-init-keyword: init:; end; define grammar-sequence (); define class () constant slot local-variable-type :: , required-init-keyword: type:; constant slot local-variable-declarators :: , required-init-keyword: declarators:; end; define class () constant slot array-inits :: , required-init-keyword: inits:; end; define class () constant slot interface-extends :: , required-init-keyword: extends:; end; define class () constant slot class-super :: false-or(), required-init-keyword: super:; constant slot class-interfaces :: , required-init-keyword: interfaces:; end; define class () constant slot field-type :: , required-init-keyword: type:; constant slot field-declarators :: , required-init-keyword: declarators:; end; define class () // only false for constant slot method-name :: false-or(), required-init-keyword: name:; constant slot method-parameters :: , required-init-keyword: parameters:; constant slot method-throws :: , required-init-keyword: throws:; // False means VOID. constant slot method-return-type :: false-or(), required-init-keyword: type:; end; define class () constant slot declaration-body :: , required-init-keyword: body:; end; define class () end; define class () constant slot declaration-body :: , required-init-keyword: body:; end; define inline method make (c == , #key body) => (object) next-method(c, modifiers: $static-modifier, body: body); end; define class () constant slot compilation-unit-package :: false-or(), required-init-keyword: package:; constant slot compilation-unit-imports :: , required-init-keyword: imports:; constant slot compilation-unit-types :: , required-init-keyword: types:; end; define constant = limited(, of: ); define function modifiers-symbols (mask :: ) => (modifiers) let modifiers = #(); when (logand(mask, $public-modifier) ~== 0) modifiers := pair(#"public", modifiers); end; when (logand(mask, $protected-modifier) ~== 0) modifiers := pair(#"protected", modifiers); end; when (logand(mask, $private-modifier) ~== 0) modifiers := pair(#"private", modifiers); end; when (logand(mask, $static-modifier) ~== 0) modifiers := pair(#"static", modifiers); end; when (logand(mask, $abstract-modifier) ~== 0) modifiers := pair(#"abstract", modifiers); end; when (logand(mask, $final-modifier) ~== 0) modifiers := pair(#"final", modifiers); end; when (logand(mask, $native-modifier) ~== 0) modifiers := pair(#"native", modifiers); end; when (logand(mask, $synchronized-modifier) ~== 0) modifiers := pair(#"synchronized", modifiers); end; when (logand(mask, $transient-modifier) ~== 0) modifiers := pair(#"transient", modifiers); end; when (logand(mask, $volatile-modifier) ~== 0) modifiers := pair(#"volatile", modifiers); end; modifiers end; define function run-java-parser (source) let lexer = make-java-lexer(source); run-parser(#f, java-parser, lexer); end;