Home

Authors

image

Contents

1. 2 18 03 Produce F2 language whitepaper outlining rough language features and design goals for F2 3 15 03 Establish implementation approach development environment and code platform convention 3 24 03 Meet with Prof Edwards to discuss potential problems and details of the proposed approach to F2 s development 3 27 03 Produce Language Reference Manual 4 05 03 Complete lexer parser and tree walker 4 12 03 Complete code generation 4 26 03 Complete compiler 5 03 03 swf files simulation 5 09 03 Final testing and debugging 5 13 03 Code freeze project feature complete 4 3 Software Development Environment This project is developed in UNIX using Java SDK 1 4 1 ANTLR version 2 7 2 is the utility used to develop the F2 parser The F2 scanner is a production of a set of Java programs The testing of F2 files will be done by using Macromedia Flash Player Makefiles are created accordingly in every source directory 4 4 Project Log The following log has recorded the actual dates on significant development breakthroughs 2 05 03 Project Initiated 2 18 03 Language Whitepaper completed 3 07 03 First draft of F2 code convention 3 14 03 Development Environment established and outlined 3 14 03 Produced target flash file for project to achieve 3 20 03 Grammar first draft 3 27 03 First draft of language reference manual 4 05 0
2. After the Header we are ready to start declaring variables creating objects and adding them to the frames of our movie All this happens in the Movie body as declared on line 10 the end brace is on line 17 in Figure 1 It is important to note that all variable and object declaration must be declared before any Frame blocks for example within lines 11 and 12 in the sample program Some declarations are shown in Figure 2 below int x 2 12 String y jon Text myText new Text y 30 BLUE Circle myCirc new Circle 10 RED B UNE Fig 2 Variable and Object Declarations Now that we have created a circle line 4 of Figure 2 and some text line 3 we are ready to place them into frames All of this happens within the Frame block declaration as shown in Figure 1 line 13 The integer 12 specifies the number of frames defined within the block The first frame block defines the first 50 frames in the 100 frame total movie while the next frame block line 17 defines the next 50 frames Within a Frame block three actions can be performed Place Animate and Insert Place is used to put objects on the screen Animate is used to linearly move objects and Insert is used to insert imported movies Some frame block definitions are shown below in Figure 3 1 Frame 50 2 Place myCirc 0 0 1 25 1 3 Place myText 0 0 26 50 2 4 5 6 Frame 50 7 Animate myCirc 0 0 1 85 85 20 1 8 Insert
3. FrameHeightDeclaration FPSDeclaration NumFramesDeclaration BGColorDeclaration ColorExpression Movie F2Declaration Assignment expression Expression Expression Logic Or expression Logic Or expression Assignment expression Relational expression 1 Relational expression Additive expression lt 7 lt S Additive expression Multiplicative expression Multiplicative expression Unary expression P Unary expression Identifier primary constant true false null New expression Assignment expression new type NewArrayDeclarator Array initializer expression NewArrayDeclarator AtomicObjectType identifier String identifier int identifier Text Rectangle Circle Ellipse Line import StringExpression MOVIENAME SrringLiteral WIDTH IntExpression HEIGHT ntExpression FPS IntExpression NUMFRAMES ntExpression BGCOLOR ColorExpression BLACK BLUE BROWN GREEN GREY ORANGE PURPLE RED WHITE YELLOW Movie Statement AtomicObjectDeclaration AtomicObjectDeclaration TextParam RectangleParam CircleParam EllipseParam LineParam CompositeObjectDeclaration Declaration Text identifier TextParam Rectangle identifier RectangleParam Circle identifier CircleParam Ellipse identifier EllipseParam
4. Line identifier LineParam StringExpression IntExpression ColorExpression IntExpression IntExpression ColorExpression IntExpression ColorExpression IntExpression IntExpression ColorExpression IntExpression IntExpression IntExpression IntExpression ColorExpression AnonAtomicObjectDeclarationList AppendStatementList AppendStatement FrameDefinition PlaceDeclaration AnimateDeclaration InsertDeclaration AnonAtomicObjectDeclaration AnonAtomicObjectDeclarationList AnonAtomicObjectDeclaration AppendStatement AppendStatementList AppendStatement Append identifier IntExpression IntExpression Frame IntExpression StatementList Place StringLiteral IntExpression IntExpression IntExpression InteExpression IntExpression Animate StringLiteral IntExpression IntExpression IntExpression IntExpression IntExpression IntExpression IntExpression Insert StringLiteral IntExpression IntExpression IntExpression IntExpression APPENDIX B Code Style Conventions B 1 Introduction F2 integrates the java code syntax along with its own distinct set of syntax to form a new grammar appropriate for coding macromedia definitions The intention behind this document is to recommend to the user a uniform standard for collaborative program development In general every programmer has his or her own specific coding style such as how he or she pl
5. Identifier Identifier StringExpression Identifier IntExpression A declaration consists of a TypeSpecifier followed by an identifier and possibly followed by an equal sign and a StringExpression or an IntExpression if the user chooses to declare and initialize 3 6 1 Array Declarations for Integers and Strings ArrayDeclaration Arrayldentifier BracketList EmptyBracketList InitArrayldentifier IntExpressionList StringExpressionList TypeSpecifier Arrayldentifier identifier BracketList identifier EmptyBracketList InitArrayldentifier IntExpression BracketList IntExpression EmptyBracketList IntExpression IntExpressionList StringExpressionList IntExpression IntExpressionList IntExpression StringExpression StringExpressionList StringExpression 3 6 2 Array Declarations for AtomicObjects AtomicObjectArrayDeclaration AtomicObjectType AtomicObjectArrayldentifier AtomicObjectArrayldentifier Identifier IntExpression When declaring an array of AtomicObjects each atomic object in the array is automatically initialized with default values specific to its atomic object type 3 6 3 Function Declarations and Definitions Functions are declared and defined outside of the Movie block They are type specified by an AtomicObjectType and int or a String Following the TypeSpecifier is the identifer and following the identifier is the parame
6. expression Relational expression gt Additive expression The type of each of the operands must be of an integer type or a compile time error occurs The operators lt less gt greater lt less or equal and gt greater or equal all yield 0 if the specified relation is false and 1 if it is true The type of the result is int 3 6 3 5 5 Equality Operators The equality operators are syntactically left associative Equality expression Relational expression Equality expression Relational expression Equality expression Relational expression If the operands are of integer type a numeric equality test is performed If the operands are both type Boolean then the operation is Boolean equality The equal to and the not equal to operators are analogous to the relational operators except for their lower precedence 3 5 6 Assignment Expressions Assignment expression Primary expression Identifier Assignment expression The result for the first operand must be a variable or a compile time error occurs This operand must be a named variable The type of the assignment expression is the type of the variable In the assignment with the value of the expression replaces that of the object referred to by the Identifier Declarations Declaration TypeSpecifier InitIdentifierList TypeSpecifier int String InitldentifierList Initldentifier InitldentifierList Initldentifier Initldentifer
7. has been separated into tokens up to a given characters the next tokens is the longest string of characters that could constitute a token 3 3 5 Comments There are two kinds of comments text A traditional comment all the text from the ASCII characters to the ASCII characters is ignored test A end of line comment all the text from the ASCII characters to the end of the line is ignored Comments do not nest and they do not occur within string or character literals 3 3 4 White Space White space is defined as the ASCII space horizontal tab and form feed characters as well as line terminators 3 3 5 Identifiers An identifier is an unlimited length sequence of F2 letters and F2 digits the first of which must be a letter An identifier cannot have the same spelling as a keyword Boolean literal or the null literal F2 interprets underscore _ asa letter and it is case sensitive 3 3 6 Literals Integer Literals An F2 integer literal is a decimal numeral A decimal numeral is either the single ASCII character representing the integer 0 or consists of an ASCII digit from 1 to 9 optimally followed by one or more ASCII digits from to 9 representing positive integers String Literals A string literal also called a string constant is a sequence of characters surrounded by double quotes as in Adjacent string literals are concatenated into a single string String literals do not contain newlin
8. object on the screen The place declaration can only be declared within frame block bodies 3 87 Animate Declaration AnimateDeclaration Animate StringLiteral IntExpression IntExpression IntExpression IntExpression IntExpression IntExpression IntExpression The parameters are object name start x coordinate start y start frame end x coordinate end y end frame depth The animate declaration is used to create linear motion The user will say the start position the end position and the frame interval for motion to occur The program will then extrapolate the line of motion and the position of the object in each frame This functionality makes it easy to move things linearly from one spot to another over as many frames as needed The string can be a string identifier or constant and the integers must be non negative The position for placing the object must be within the size of the movie and the start and end frame interval must not exceed the number of frames declared in the Frame block definition in which the place declaration is located A depth of 0 is at the top and the higher the depths the lower the object on the screen The animate declaration can only be declared within Frame block bodies 3 8 8 Insert Declaration InsertDeclaration Insert StringLiteral IntExpression IntExpression IntExpression IntExpression The parameters are movie name relative x coordinate relative y coordinate
9. of the tree walker an array of Vector frames has been passed onto BlackBox java However before BlackBox starts execution the walker will decide first whether to import a separate F2 file or not This is decided by the occurrence of the key word import If the import key word does exist in the original F2 file the tree walker will then call ImportBox java as the Runtime environment to compile the indicated F2 import movie The import movie is then parsed with its frames stored in the array and objects stored in their corresponding vectors At the end of ImportBox it returns the array of Frame Vector and pass it to BlackBox The next stage is the BlackBox where detailed algorithms for specific F2 functionalities are written Functions such as Place Insert Animate have been implemented inside of BlackBox Their algorithms involve mostly flash tag calculations In general the BlackBox if necessary just takes in an or multiples of depend on how many movies are imported array of Frame Vector and makes the necessary calculations for the called functions At the end of a series of evaluation and reassignment of values BlackBox loops through the array of Frame Vectors from import F2 movies and incorporates it into its own generated array of Frame Vectors It then starts assembly code generation by looping through the array Once the assembly code generation is done BlackBox calls WriteSWF java to translate everything into the binary rep
10. 0 Alpha 0 FillStyleType 16 16 linear gradient fill Matrix II Start Matrix Matrix II End Matrix MorphGradient NumGradients 2 Number of MorphGradRecords MorphGradRecord StartRatio 5 RGBA Red 0 Green 102 Blue 204 Alpha 100 EndRatio 5 RGBA Red 0 Green 102 Blue 204 Alpha 100 MorphGradRecord StartRatio 8 RGBA Red 0 Green 201 Blue 102 Alpha 80 EndRatio 8 RGBA Red 0 Green 201 Blue 102 Alpha 80 FillStyleType 18 18 radial gradient fill Matrix II Start Matrix Matrix II End Matrix MorphGradient NumGradients 2 Number of MorphGradRecords MorphGradRecord StartRatio 5 RGBA Red 0 Green 102 Blue 204 Alpha 100 EndRatio 5 RGBA Red 0 Green 102 Blue 204 Alpha 100 MorphGradRecord StartRatio 8 RGBA Red 0 Green 201 Blue 102 Alpha 80 EndRatio 8 RGBA Red 0 Green 201 Blue 102 Alpha 80 FillStyleType 64 64 tilted bitmap fill BitmapID 2 ID of bitmap character for fill Matrix II StartBitmapMatrix Matrix II EndBitmapMatrix FillStyleType 65 65 tilted bitmap fill BitmapID 2 ID of bitmap character for fill Matrix II StartBitmapMatrix Matrix II EndBitmapMatrix MorphLineStyles LineStyleCounts 2 Either LineStyleCount or LineStyleCountExtended StartWidth 20 EndWidth 20 RGBA II Start Color Red 0 Green 201 Blue 102 Alpha 80 RGBA II End Color Red 0 Green 201 Blue 102 Alpha 80 Shape NumFillBits 12 NumLineBits 12 ShapeRecord T II in DefineShape Tag Shape NumFillB
11. 3 Testing Phase I initiated 4 12 03 Code lexical and syntactical grammar finalized 4 23 03 First working version of lexer and parser 03 31 03 First working version of compiler back end 4 04 03 Starting Code generation 4 04 03 First working version of intermediate representation 5 03 03 Work on code checking in Macromedia Flash Player 05 10 03 Finalized version of scanner Finalized version of compiler 05 03 03 Sample swf produced under F2 05 10 03 Simulation of Macromedia Flash using F2 05 13 03 Final Paper 5 14 03 Meeting With Prof Edwards CHAPTER 5 Architecture Design The structure of the F2 compiler is based upon the foundation of Macromedia Flash software Given that the objective behind F2 is to produce a programmable Flash language that can generate Macromedia Flash Shockwave files it is thus absolutely necessary for F2 to work around the structural representation embedded within Macromedia In this project the F2 compiler is broken down into the following parts lexer parser tree walker runtime environment and code generator Front End Lexer Parser and Tree Walker Starting with the front end F2 has been modeled after a graphics user interface It has been organized accordingly to form a clear vocabulary as shown in Chapter 2 Tutorial to abridge the gap between words and pictures Grammar features are thoroughly explained in Chapter 3 The concept behind an F2 movie is that it is a collection of individua
12. Programming Language Translator Spring of 2003 p A Macromedia Flash Specification Coding Language Authors Benjamin Chan Jonathan So Shawn Tay Jen Yu Wang CHAPTER 1 Introduction to F2 11 Background The development of information technology has revolutionized this 21st century The existence of the World Wide Web continuously changes the life style of modern man as well as the business practice of the market The invention of the Shockwave Flash software lies in the center of this internet age The concept of the Internet gives rise to the idea of transporting graphics and animation across the web Presently over 436 million people around the globe have access to a variety of Macromedia Flash content Macromedia Flash is a graphics animation generation technology that provides a consistent display of graphical experience across different system platforms Flash allows users to create scalable interactive animation and 2 dimension graphics for the web such as animated logos long form animations navigation controls and even complete websites all delivered via Shockwave files swf the exported Flash file format Unlike traditional animation and movie file formats the content and concept behind Flash is intuitive and easy to grasp for users At the moment Macromedia Flash and Director Programs are the two main sources available for authoring web viewable Flash files Both softwares rely heavily on an elaborate and expensive
13. TypeFlag 1 Il always 1 for StraightEdgeRecord StraightFlag 1 always 1 for StraightEdgeRecord NumBits 11 GeneralLineFlag 1 GeneralLine 1 Vert Horz Line DeltaX 820 II if GeneralLineFlag DeltaY 820 II if GeneralLineFlag VertLineFlag if GeneralLineFlag 0 if 0 gt Vert 1 gt Horz DeltaX if GeneralLineFlag 0 and VertLineFlag DeltaY II if GeneralLineFlag 0 and VertLineFlag CurvedEdgeRecord TypeFlag 1 Il always 1 for CurvedEdgeRecord StraightFlag 0 always 0 for CurvedEdgeRecord NumBits 8 ControlDeltaX 685 ControlDeltaY 340 AnchorDeltaX 543 AnchorDeltaY 0 EndShapeRecord TypeFlag 0 EndOfShape 0 II PlaceObject Tag PlaceObject Tag4 Length 10 II Either Length or Long Length gt 63 bytes CharacterlD 1 Depth 1 Matrix CXForm hasAddTerms 1 hasMultTerms 1 NBits 4 RedMultTerms 10 if hasAddTerms GreenMultTerms 10 if hasAddTerms BlueMultTerms 10 if hasAddTerms RedAddTerms 10 Il if hasMultTerms GreenAddTerms 10 if hasMultTerms BlueAddTerms 10 if hasMultTerms II RemoveObject Tag RemoveObject Tag 5 Length 10 II Either Length or Long Length gt 63 bytes CharacterlD 1 Depth 1 II SetBackgroundColor Tag SetBackgroundColor Tag 9 Length 10 II Either Length or Long Length gt 63 bytes RGB II DefineShape2 Tag DefineShape2 Tag 22 Length 10 II Either Length or Long Length gt 63 bytes ShapelD 1 RECT ShapeWithStyl
14. a value that is assignment compatible with its type Moreover every variable in a program must have a value before its value is used Expressions The precedence of expression operators is the same as the order of the major subsections of this section the highest precedence first Within each subsection the operators have the same precedence Left or right associative is specified in each subsection for the operators discussed therein 3 5 1 Primary Expressions Primary expressions are identifiers constants strings or expressions in parentheses Primary expression Identifier primary constant true false null 25 New expression Assignment expression An identifier is a primary expression provided that it has been suitably declared as discussed below Its type is specified by its declaration A constant is a primary expression with either type int or type string New expression is an initialization expression that declares the instance of an array object A parenthesized assignment expression is a primary expression that contains operators 3 5 2 Multiplicative Operators The multiplicative operators group left to right Multiplication expression Multiplication expression Postfix expression Multiplication expression Postfix expression Multiplication expression Postfix expression The operands of and must have arithmetic type the operands of must have integral type The usu
15. aces curly braces semi colons and cases The objective of this document is not to force users to follow a specific coding style preferred by the designers of F2 but rather to present a general coding convention that reflects clarity and ease for maintenance B 2 General Format Just as recommended by every existing programming language in the world it is a good practice to produce code that is easy to read and sensibly laid out Variables should be named accordingly to reflect their purpose and commented as users see fit Blocks should be indented with a consistent width for good formatting nested blocks should be indented appropriately to reflect hierarchy of execution It is good convention to provide explanatory comments for all nontrivial blocks B 3 Documentation Comments By convention every public method and field of Java class should be documented with a Javadoc comment For F2 it is recommended to perform such measure to clarify the meaning and structure of a F2 program Comments on local methods should describe formal parameters and explain their functionalities The specification of F2 objects should be thoroughly covered in comments Moreover given that F2 produces macromedia swf files it is imperative to include at the beginning of the program the complete synopsis of the desired macromedia file Bibliography e Macromedia Flash SWF File Specification Version 6 e Antler Reference Manual e The C Programming Langua
16. al arithmetic conversions are performed on the operands and predict the type of the result The binary operator denotes multiplication The binary operator yields the quotient and the operator the remainder of the division of the first operand by the second if the second operand is 0 the result is undefined 3 5 3 Additive Operators The additive operators and group left to right If the operands have arithmetic type the usual arithmetic conversions are performed There are some additional type possibilities for each operator Additive expression Multiplicative expression Additive expression Multiplication expression Additive expression Multiplication expression String Concatenation Operator If only one operand expression is of type String then string conversion is performed on the other operand to produce a string at run time The result is a reference to a newly created String that is the concatenation of the two operands strings The left hand String operand precedes the right hand operand in the newly created String Additive Operator or for Integers The result of the operator is the sum of the operands The result of the operator is the difference of the operands 3 5 4 Relational Operators The relational operators group left to right Relational expression Relational expression lt Additive expression Relational expression gt Additive expression Relational expression lt Additive
17. d FillStyleType 0 5 Different FillStyleTypes 0 solid fill RGB II RGB if Shape1 or Shape2 or RGBA if Shape3 Red 0 Green 102 Blue 204 FillStyleType 16 16 linear gradient fill Matrix II Matrix data type hasScale 1 NScaleBits 12 if hasScale ScaleX 1170 if hasScale ScaleY 1170 if hasScale hasRotate 1 NRotateBits 12 if hasRotate RotateSkew0 if hasRotate RotateSkew1 if hasRotate NTranslateBits 15 TranslateX 9478 TranslateY 5877 Gradient NumGradients 2 Number of GradRecords GradRecords Ratio 5 RGBA II RGB if Shape1 or Shape2 or RGBA if Shape3 Red 0 Green 102 Blue 204 Alpha 100 GradRecords Ratio 8 RGBA II RGB if Shape1 or Shape2 or RGBA if Shape3 Red 0 Green 201 Blue 102 Alpha 80 FillStyleType 18 18 radial gradient fill Matrix II Matrix data type hasScale 1 NScaleBits 12 if hasScale ScaleX 1170 if hasScale ScaleY 1170 if hasScale hasRotate 1 NRotateBits 12 if hasRotate RotateSkew0 if hasRotate RotateSkew1 if hasRotate NTranslateBits 15 TranslateX 9478 TranslateY 5877 Gradient NumGradients 2 Number of GradRecords GradRecords Ratio 5 RGBA II RGB if Shape1 or Shape2 or RGBA if Shape3 Red 0 Green 102 Blue 204 Alpha 100 GradRecords Ratio 8 RGBA II RGB if Shape1 or Shape2 or RGBA if Shape3 Red 0 Green 201 Blue 102 Alpha 80 FillStyleType 64 64 tilted bitmap fill BitmapID 2 ID of bitmap character
18. e II Protect Tag Protect Tag 24 Length 0 II PlaceObject2 Tag PlaceObject2 Tag 26 Length 10 II Either Length or Long Length gt 63 bytes PlaceFlagHasClipActions 0 always 0 coz tag not written PlaceFlagHasClipDepth 0 always 0 coz tag not written PlaceFlagHasName 1 PlaceFlagHasRatio 1 PlaceFlagHasColorTransform 1 PlaceFlagHasMatrix 1 PlaceFlagHasCharacter 1 PlaceFlagMove 1 Depth 1 CharacterlD 1 II if PlaceFlagHasCharacter Matrix Il if PlaceFlagHasMatrix CXForm II if PlaceFlagHasColorTransform Ratio 5 II if PlaceFlagHasRatio Name II if PlaceFlagHasName II RemoveObject2 Tag RemoveObject2 Tag 28 Length 10 II Either Length or Long Length gt 63 bytes Depth 1 II DefineShape3 Tag DefineShape3 Tag 32 Length 10 II Either Length or Long Length gt 63 bytes ShapelD 1 RECT ShapeWithStyle all RGB becomes RGBA II FrameLabel Tag FrameLabel Tag 43 II Either Length or Long Length gt 63 bytes Length 10 Name 46 IIF 57 IIW 53 I S 0 Il end of String II DefineMorphShape Tag DefineMorphShape Tag 46 Length 10 II Either Length or Long Length gt 63 bytes CharacterlD 1 RECT II Start Bounds RECT II End Bounds Offset 30 MorphFillStyles FillStyleCount 4 FillStyleCount or FillStyleCountExtended FillStyleType 0 5 Different FillStyleTypes 0 solid fill RGBA II Start Color Red 0 Green 102 Blue 204 Alpha 100 RGBA II End Color Red 0 Green 0 Blue
19. ems F2 can potentially capture a large number of beginner level Flash developers e Asa programming language F2 incorporates into swf movies the ease in editing that is only natural to text based source codes The difficulty in editing fla the editable Flash file format files through a complex graphical interface gives F2 a comparative advantage CHAPTER 2 F2 Tutorial F 2 is a simple but powerful animation language In general the language and syntax is very similar to Java especially for variable declarations arrays for loops while loops and even object and frame declarations Semi colons are used as separators To begin writing F 2 it is important to know the grammatical structure of each animation or movie Each movie must start with the Header Statements which are shown in Figure 1 lines 3 to 8 These specify the general characteristics of the movie The sample program below outputs a movie called mymovie swf which has a width and height of 100 pixels plays at 12 frames per second contains 100 frames total and has a white background color refer to the LRM for the complete list of colors Also the Header variables must be declared in capital letters import othermovie import othermovie2 MOVIENAME mymovie WIDTH 100 HEIGHT 100 FPS 12 NUMFRAMES 100 BGCOLOR WHITE ONAMDAWNE Ko 10 Movie 13 Frame 50 17 Frame 50 19 J 20 Fig 1 Program Structure
20. end and Assembly Language The initial testing runs for our backend are very tedious and labor intensive Given that Flash files are stored in binary digits the only way to check whether any parts of the assembly language has been correctly represented is to go back to the Macromedia Flash User Manual The manual provides the actual binary representation of the specified tags Once the Assembly language has been produced testing has gone from the manual raw code checking to a higher level abstraction checking Similarly with the building of backend programs such as ReadSWF java and WriteSWF java the error within these programs could only be check by the Flash user manual The main target in this testing phase is to ensure the correct binary recapitulation of Macromedia Flash tags within our intermediate assembly language and help programs from our backend Code Generation and Runtime Environment We performed the testing at this stage mainly through using sample programs To guarantee the correct inner working of methods developed inside this stage we perform exactly the proposed methodology to do testing We use different source codes to test against the different functions inside the Runtime Environment Code Generation We run sample source codes f2 files through the parser and then run Runtime Environment code generation that output these f2 files into a Shockwave file Furthermore we can check the correctness of the code through the Macr
21. erful tool for users who desire a faster approach to flash generation than the conventional macromedia software The syntax behind F2 is designed to capture an appropriate translation from graphical design to written code The complete grammar of F2 integrates Java s strictly typed structure approach to extrapolate further a language base appropriate for flash generation 3 2 Grammar This section describes the context free grammars used in F2 specification to define the lexical and syntactical structure of a program 3 2 1 Grammar Notation Lexical and syntactic grammars for F2 are introduced in this specification The lexical grammar has as its terminal symbol the characters of the Unicode character set It defines a set of productions starting from distinguished nonterminals that describe how sequences of Unicode characters are translated into a sequence of input elements These input elements with white space and comments discarded form tokens The syntactic grammar describes how sequences of tokens can form syntactically correct programs Non terminal and terminal symbols are shown in separate fonts in the production of the lexical and syntactic grammars and throughout this specification whenever the text is directly referring to such symbols Non terminal symbols are shown in italic type The definition of a Non terminal is introduced by the name of the Non terminal being defined followed by a colon On the other hand terminal is sho
22. es or double quote characters in order to represent them escape sequences are available Newline An Form feed M Carriage return Ar question mark 2 Horizontal tab Nt double quote bud Backslash Boolean Literals The Boolean type has two values represented by the literals true and false from ASCII letters Null Literals The null type has one value the null preference represented by the literal null which is formed from ASCII characters A null literal is always the null type 3 3 7 Constant A constant consists of a sequence of decimal digits A constant is unsigned and never negative The maximum value for a constant is 2 3 3 8 Keywords There are three sets of keywords First set has keywords with initial uppercase letter Second set has keywords with all lowercase letters Third set has keywords with all uppercase letters The following identifiers are reserved for use as the three sets of keywords and cannot be used otherwise FPS Animate break HEIGHT Circle do MOVIENAME Ellipse else NUMFRAMES Frame for WIDTH Import if BGCOLOR Insert int BLACK Line return BLUE Movie while BROWN Object GREEN Place GREY Random ORANGE Rectangle PURPLE String RED WHITE YELLOW While true and false might appear to be keywords they are technically Boolean literals Similarly while null might appear to be a keyword it is technically the null literal 3 4 Meaning of Identifiers Identifiers or names re
23. ety When a movie is reused the movie will be placed relative to the coordinates specified by the user Also the imported movie inherits current movie s background color and frames per second Checks will ensure that the imported movies are no larger in length and width than the current movie and that the number of frames in the imported movie does not exceed the number of frames in the Frame block of the current movie 3 8 2 Header Statements MovieDeclaration MOVIENAME StringLiteral FrameWidthDeclaration WIDTH IntExpression FrameHeightDeclaration HEIGHT IntExpression FPSDeclaration FPS IntExpression NumFramesDeclaration NUMFRAMES IntExpression BGColorDeclaration BGCOLOR ColorExpression ColorExpression BLACK BLUE BROWN GREEN GREY ORANGE PURPLE RED WHITE YELLOW The header statements are where the user defines the general setting for the movie They have to be declared in the shown order none can be omitted or set to null values and they all must be declared before the Movie block MOVIENAME defines the name that the swf file will be saved as This name does not have to match the name of the source code file The name must be a sequence of letters and digits The first character must be a letter FPS defines the rate at which the movie will be played in frames per second and must be a non negative integer NUMFRAMES defines the number of frames for the entire movie and must be a non ne
24. f these software Although not as powerful and comprehensive F2 is an open source program It is free for all users who want to make flash graphics Moreover users running Linux or other popular Unix based operating systems can overcome the inaccessibility of Macromedia programs through F2 F2 is compatible with all popular operating systems not limited Windows and Macintosh Built upon Java which is extremely portable language F2 has also inherited this nice feature of Java 1 2 4 Simplicity F2 is a clear simple and intuitive language that allows the user to construct graphics and animation through coding Based on the concept of Macromedia Flash F2 attempts to recapitulate the functionalities provide by Macromedia Flash without the incorporation of a user interface In addition itis nota graphical extension of a non graphical language such as Java s complex graphics libraries Swing or AWT F2 is in itself a programming language that can produce simple Flash graphics and animation 1 2 5 Sharable and Editable Today JavaScript source code is widely shared over the Internet In fact the complete structure behind internet websites is devoted to sharing source codes such as JavaScript This trend supports the notion that F2 could potential become a widely shared language like JavaScript There are several reasons e As mentioned earlier F2 is a free language Combined with the fact that F2 is compatible with all popular operating syst
25. fer to a variety of things functions and objects An object sometimes called a variable is a location in storage and its interpretation depends on its type 3 41 Basic Data Types There are two fundamental types Objects declared as integers int contain unsigned decimal digits with a maximum value of up to 2 Objects declared as strings String contain a sequence of characters 3 4 2 Boolean Type The Boolean type represents a logical quantity with two possible values indicated by the literals true and false 3 4 3 Reference Types Besides the basic data types there are two kinds of reference types Arrays of objects of a given type Methods returning objects of a given type In general these methods of constructing objects can be applied recursively 3 44 Objects An Object can be of type atomic shape object or composite shape object These two types of shape objects are defined as follows Atomic Shape Objects There are five atomic shape objects Text Circle Ellipse Line Rectangle For detailed descriptions refer to sections dedicated to the above atomic shape objects Composite Shape Object There is one composite shape object Object A composite shape object defined by the user contains a series of atomic shape objects and other composite shape objects previously defined by the user 3 5 3 45 Variables A variable is a storage location and has an associated type A variable always contains
26. for fill Matrix II Matrix data type hasScale 1 NScaleBits 12 if hasScale ScaleX 1170 if hasScale ScaleY 1170 if hasScale hasRotate 1 NRotateBits 12 if hasRotate RotateSkew0 if hasRotate RotateSkew1 if hasRotate 1 NTranslateBits 15 TranslateX 9478 TranslateY 5877 FillStyleType 65 65 tilted bitmap fill BitmapID 2 ID of bitmap character for fill Matrix II Matrix data type hasScale 1 NScaleBits 12 if hasScale ScaleX 1170 if hasScale ScaleY 1170 if hasScale hasRotate 1 NRotateBits 12 if hasRotate RotateSkew0 if hasRotate RotateSkew1 if hasRotate NTranslateBits 15 TranslateX 9478 TranslateY 5877 LineStyleArray LineStyleCount 2 Either LineStyleCount or LineStyleCountExtended Width 20 RGB II RGB if Shape1 or Shape2 or RGBA if Shape3 Red 0 Green 0 Blue 0 NumFillBits 1 NumLineBits 1 ShapeRecord StyleChangeRecord TypeFlag 0 II always 0 for StyleChangeRecord StateNewStyles 1 StateLineStyle 1 StateFillStyle1 1 StateFillStyleO 1 StateMoveTo 1 MoveBits 11 II if StateMoveTo MoveDeltaX 820 if StateMoveTo MoveDeltaY 820 if StateMoveTo FillStyle01 if StateFillStyleO FillStyle11 if StateFillStyle1 LineStyle 1 II if StateLineStyle1 1 FillStyleArray if StateNewStyles LineStyleArray II if StateNewStyles NumFillBits 1 if StateNewStyles NumLineBits 1 if StateNewStyles StraightEdgeRecord
27. gative integer WIDTH defines the width of the movie in pixels and must be a non negative integer HEIGHT defines the height of the movie in pixels and must be a non negative integer BGCOLOR defines the background color of the movie and will stay constant for the entire length of the movie The color specified must be one of the ten recognized standard colors RED BLUE GREEN WHITE ORANGE YELLOW BLACK PURPLE BROWN and GRAY 3 83 Movie Block Definition Movie Movie CompoundStatement CompoundStatement DeclarationList StatementList StatementList Statement StatementList Statement DeclarationList Declaration DeclarationList Declaration Declaration AtomicObjectDeclaration CompositeObjectDeclaration PrimitiveTypeDeclaration PrimitiveTypeDeclaration String IdentifierList int IdentifierList IdentifierList Identifier IdentifierList Identifier The Movie block definition is similar to the main method declaration in a Java program Object and frame declarations will be made within the braces The import and header statements must be made outside and before the Movie block definition and nothing may follow the definition either 3 8 4 Atomic Object Declarations AtomicObjectDeclaration Text identifier TextParam Rectangle identifier RectangleParam Circle identifier CircleParam Ellipse identifier EllipseParam Line identifier LineParam TextParam S
28. ge by Kernighan and Ritchie e Java Software Solutions By Lewis Loftus Java API by Suns Microsystems
29. graphical interface Flash sells for 499 and Director 1 199 Furthermore these softwares lack portability across different operating systems Only available for Windows and Macintosh users The programming language F2 is an alternative for users to produce viewable Shockwave files This language has overcome several deficiencies that plague Macromedia Flash and Director programs The language is designed to enable the user to program simple Flash functionalities in a non graphical traditional text based programming environment Oh yes it s free 1 2 Design Goal of F2 F2 is a flash graphics purpose object oriented programming language It is designed to be simple enough that it can achieve fluency similar to many commonly used flash functionalities The F2 programming language is related to Java but is organized for the purpose of an intuitive coding approach towards flash graphics 1 2 1 Precision Since both Macromedia Flash and Director are graphical environments certain operations such as the aligning spacing sizing and positioning of objects rely entirely on visual estimation F2 eliminates the need to approximate during situations such as centering horizontal line up or exact positioning given a fix pixel number in height F2 allows one to explicitly specify the object properties and position coordinates 1 2 3 Availability The availability of Macromedia Flash and Director has been greatly reduced by the expensive cost o
30. is executed repeatedly so long as the value of the expression remains unequal to 0 the expression must be 3 8 arithmetic With while the test occurs before each execution of the statement In the for statement the first expression is evaluated once and thus specifies initialization for the loop There is no restriction on it type The second expression must be arithmetic it is evaluated before each iteration and if it becomes equal to 0 the for is terminated The third expression is evaluated after each iteration and thus specifies a re initialization for the loop There is no restriction on its type F 2 Source File Specifications This section describes the format of an F 2 source file More specifically it describes the import statement header statements Movie block atomic object declarations composite object declarations Frame block place declaration animate declaration and insert declaration 3 8 1 Import Statement ImportDeclaration import StringExpression The import statement tells the compiler to prepare a data structure based upon another program filename is the StringExpression for use by the current program This is done before any further processing of the current program All import statements must be placed at the very beginning of the program before any other commands The import feature allows the user to reuse movies that they have already created However the imported movie must be used in its entir
31. its 12 NumLineBits 12 ShapeRecord II in DefineShape Tag II ExportAssets Tag ExportAssets Tag 56 Length 10 II Either Length or Long Length gt 63 bytes Count 2 Tag 100 Name 46 IF 57 IW 53 I S 0 Il end of String Tag 101 Name 46 IF 57 Il W 53 I S 0 Il end of String II Import Assets Tag ImportAssets Tag 57 Length 10 II Either Length or Long Length gt 63 bytes URL 46 IIF 57 IIW 53 IIS 0 Il end of String Count 2 Tag 100 Name 46 IIF 57 Il W 53 IS 0 Il end of String Tag 101 Name 46 IIF 57 IW 53 IS 0 Il end of String II EnableDebugger Tag EnableDebugger Tag 58 Length 10 II Either Length or Long Length gt 63 bytes Password 46 IF 57 IW 53 IS 0 Il end of String II EnableDebugger2 Tag EnableDebugger2 Tag 64 Length 10 II Either Length or Long Length gt 63 bytes Password 46 IIF 57 Il W 53 IS 0 Il end of String CHAPTER 6 Testing Plan 6 1 Objectives No computer program can function appropriately without being tested layer after layer It is common to only discover errors after the developed program has been thoroughly checked over by different testing plans The objective of this section of the project is to achieve just that analyze F2 from different angles and use several comprehensive approaches to test for errors at the various development phases With careful choice of unit test regression tests white box and black box tests we can guarantee a rather smoo
32. l frames with each frame containing the necessary objects that hold their individual specifications The data structure behind the implementation of this concept is that each Movie file contacts an array of frames with each frame containing a Vector to hold its objects to be shown And each Shape object is defined as objects with their own necessary parameters The parsing of the F2 language is implemented around this central theme With the defined parser rules parsing is done within the extended tree walker Inside of the tree walker F2 create integer or string variables and assign values as instructed by the grammar rules Integer evaluation is also performed locally inside of the walker before assignment occurs Upon hitting a Shape object declaration the walker instantiates the defined abstract object according to the type parsed by the walker And the walker will assign the parameters for this object locally Since F2 is a strongly type language type checking is enforced strictly during compile time this measure is done to prevent runtime errors derived from incompatible type assignment or evaluation At the end of the tree walker depending on whether the key word import is called or not the tree walker will pass filled the array of frame and frame vectors onto the next stage Runtime Environment and Code Generation Runtime Environment and Code Generation ImportBox java BlackBox java WriteSWF java As mentioned before at the end
33. le Initializer Array Initializer Initializer Method Head Import definition Header statement Movie block Frame definition EOF Int String identifier Built In Type Int String Boolean void ID ID ID Parameter Declaration List Declarator Brackets Variabel declaration ID Declarator Brackets Variable Initializer CET Initializer ie lt Initializer 572 y Expression Array Initializer ID Parameter Declaration List y Parameter Declaration List Parameter Declaration Parameter Declaration Compound Statement Statement For Initializer For Condition For Iterator 4 Parameter Declaration ID ID Declarator Brackets Statement Y Compound Statement Declaration Expression iP Expression Statement else Statement for For Initializer For Condition For Iterator while Expression Statement break ID return Expression 66 99 Declaration Expression list Expression Expression Expression Expression list Assignment expression Equality expression Relational expression Additive expression Multiplicative expression Primary expression New expression NewArrayDeclarator ParameterDeclaration AtomicObjectType ImportDeclaration MovieDeclaration FrameWidthDeclaration
34. nimate and Append declarations It is possible to leave the body empty however The order in which the Frame blocks are declared is the order in which they will be played Frame 100 lt body1 gt Frame 50 lt body2 gt Frame 300 lt body3 gt The above code means that from frames 0 to 99 body1 will be played From frames 100 to 149 body2 will be played From frames 150 to 449 body3 will be played Any number of frame block definitions are allowed but the total number of frames must not exceed the number of frames in the movie If they do then an error will be given and the file will not compile properly 3 8 6 Place Declaration PlaceDeclaration Place StringLiteral IntExpression IntExpression IntExpression InteExpression IntExpression The parameters are object name x coordinate y coordinate start frame end frame depth The place declaration is used to put objects in the frames at the specified location and depth for a set number of frames The start and end frames dictate how long and when the object will be shown The string can be a string identifier or constant and the integers must be non negative The position for placing the object must be within the size of the movie and the start and end frame interval must not exceed the number of frames declared in the frame block definition in which the place declaration is located A depth of 0 is at the top and the higher the depths the lower the
35. omedia Flash Player Any incorrect bit in the file will prevent the Flash Player from outputting the file Thus it is very easy to know whether inner working of code generation is executing accordingly Our last resort to check the methods are to produce copies of swf files that are equivalent to what we want to present syntactically By checking through the assembly language representation of both files the Macromedia copy and our F2 file we at times can find out what went wrong Comprehensive Testing for F2 At the completion of our F2 program development we start the final testing for the entire F2 language We begin with writing full versions of F2 programs that involves elaborate evaluation of Movie objects logical statements and a combination of methods defined in F2 We design source codes in such ways as to challenge the comprehensiveness of F2 And unfortunately there are several minor design flows we cannot overcome in the given amount of time First our proposed Composite Objects cannot be implemented properly Second our Text objects cannot be produced correctly as we planned There are faulty cases Moreover a letter or number with a given Font is represented by 200 bytes on average It is impossible to complete this Text library Again limited by time we could not devise an appropriate algorithm for rotational movements Other than the above mentioned areas all other aspects of F2 have been tested thoroughly Results are p
36. ositive F2 executes as we have describe in the reference manual CHAPTER 7 Experience of F2 Language Development The entire journey of F2 program development has been very rewarding In a group environment each of us learns how to utilize and prioritize things to achieve maximum efficiency and our overall objective We realize that a good language development entails intensive structural planning and highly organized implementation details Detail oriented approach is very crucial during each phase of language development Other factors such as comprehensive testing plans thorough research on related material and proper time management are also integral factors toward a successful language development Other than the technical areas we also learn how to work as a team Computer language development has always required the joint force of several devoted individuals The atmosphere between each individual team members has to be carefully maintained as to prevent any potential confrontation that could infringe the progress of the project Finally we would like to say thanks to everyone who has helped us along the way All the ideas advices and support we received throughout this project have contributed to the proper completion of the language development of F2 Thank you again APPENDIX A F2 Grammar WholeProgram Constant Type Built In Type Identifier Field Variable Declarator Declarator Brackets Variab
37. othermovie 0 0 21 2 9 Fig 3 Frame block declarations and definitions The sample code in Figure 3 shows our myCirc line 2 object on the screen for frames 1 25 of the movie and then shows our myText line 3 object for the next 25 frames Line 7 moves our myCirc object from the top left corner to the bottom right corner of the movie for the next 20 frames The last feature we need to discuss is importing new movies Suppose we have a previously created movie source code the f2 file we can import the movie into our current movie This is shown in Figure 1 line 1 and 2 with a file called othermovie f2 and othermovie2 f2 Import statements must be made before the header and any number of them can be made Our othermovie has been inserted into the last 30 frames of our movie in Figure 3 line 8 Finally to generate a shockwave movie save your program with the extension f2 and then at the command line run java F2_1Main moviename f2 If there are no errors you should receive a confirmation of a successful compilation This concludes the tutorial Happy programming CHAPTER 3 Reference Manual 3 1 Introduction F2 is a computer language built with the intention to integrate programming capability into the generation of shockwave flash files The ultimate goal for F2 is to overcome Macromedia s lack of precision reproducibility and portability of SWF files Contrary to Macromedia Flash generator F2 is a very pow
38. resentation of F2 with the file extension swf A side note to users is that F2 s assembly language is an important feature This one extra layer of abstraction between source code and binary bits grant the users with more power Given that Macromedia has already established a system of binary tag representation for its graphics elements F2 inherits these tags and organize these tags into an intermediate representation which can be easily read by the users The simplicity and structured format of the assembly code allows easy debugging for later Assembly Language Specification r Assembly Language for F 2 Benjamin Chan 05 05 03 II File Header in every flash file SwfFileHeader F II always F W II always W S II always S Version 6 11 6 FileLength 225 II Length of file in bytes RECT II RECT data type Background size Nbits 15 Xmin 0 Xmax 11000 Ymin 0 Ymax 8000 FrameRate 12 Il fps NumFrames 13 II total number of frames II End Tag End Tag 0 Length 0 II ShowFrame Tag ShowFrame Tag 1 Length 0 II Length of Tag in bytes II Either Length or Long Length gt 63 bytes II DefineShape Tag DefineShape Tag 2 LongLength 73 II Either Length or Long Length gt 63 bytes ShapelD 1 II ID of the Shape in the Dictionary RECT II RECT data type Shape Size Nbits 12 Xmin 1170 Xmax 1170 Ymin 1170 Ymax 1170 ShapeWithStyle FillStyleArray FillStyleCount 5 Either FillStyleCount or FillStyleCountExtende
39. start frame depth The insert declaration is the functionality that allows the user to use the movies that have been imported using the import declaration The relative x and y coordinates define where the imported movie should be placed in relation to the current movie The start frame dictates when the imported movie should start playing There will be a check that ensures the imported movie length does not exceed the length defined by the Frame block definition The string can be a string identifier or constant and the integers must be non negative The position for placing the object must be within the size of the movie A depth of 0 is at the top and the higher the depths the lower the object on the screen The insert declaration can only be declared within Frame block bodies CHAPTER 4 Project Plan Schedule 4 1 Project Responsibilities The project is evenly divided among the team members to achieve maximum efficiency Nevertheless testing and debugging of all project code are done together by all team members The development task of F2 is divided accordingly Benjamin Chen Backend Code Generation Testing Jonathan So Tree Walking Code Generation Testing Shawn Tai Lexer Parser Tree Walking Testing Jen Yu Wang Lexer Parser Documentation Code Generation 4 2 Prospective Project Development Schedule The following deadlines were proposed for various key development phases
40. ter list surrounded by parentheses ParameterTypeList ParameterList ParameterList ParameterList ParameterDeclaration ParameterList ParameterDeclaration 3 7 ParameterDeclaration AtomicObjectType identifier String identifier int identifier AtomicObjectType Text Rectangle Circle Ellipse Line The function is then defined within a pair of braces At the end of the function definition the function returns an atomic object string or integer Statements Statements are executed in sequence Statements are executed for their effect and do not have values They fall into several groups Statement Selection statement Iteration statement Jump statement 3 71 Selection Statements Selection statements choose one of several flows of control Selection Statements if expression Statement if expression Statement else Statement In both forms of the if statements the expression is evaluated and if it compares unequal to 0 the first sub statement is executed In the second form the second sub statement is executed if the expression is 0 The else ambiguity is resolved by connecting an else with the last encountered else less if at the same block nesting level 3 7 2 Iteration Statements Iteration statements specify looping Iteration statement while expression Statement for expressionopt expressionop expressionopt Statement In the while statement the sub statement
41. th evolution of program development 6 2 General Concept The general concept behind our testing plan is to design both F2 and Shockwave files as test programs that could help us as the developers to understand any loop holes that might have occurred during the actual implementation of our logical designs These helpers can perform some general implementation checks as well as going deeper behind the design structure of F2 They are deployed against the F2 code to test smartly and efficiently 6 3 Methods To avoid prolong errors that could possibly effect the different structural parts of F2 our group seeks to run test programs in parallel throughout each of the development phases These tests have been consistently modified throughout each phase to ensure testing upon program integrations The Macromedia Flash Player is used as the main error checker for our sample F2 programs The Flash player will display our f2 files if these files are correct and recognizable by Macromedia Flash During the stage of grammar production we decide to print out and evaluate the values of all nodes inside the AST tree to test the logical structure behind the grammar and the layout of our parser During the stage of backend and assembly development we plan to use the Macromedia Flash User manual and the Macromedia Flash Player as the main testing tools This decision is based on the nature of SWF files Their binary digit representation limits down a
42. tringExpression IntExpression ColorExpression RectangleParam IntExpression IntExpression ColorExpression CircleParam IntExpression ColorExpression EllipseParam IntExpression IntExpression ColorExpression LineParam IntExpression IntExpression IntExpression IntExpression ColorExpression The primitive object declarations are used to create atomic no other previously created objects can be appended to it objects The five primitive objects from which all other objects will be built are listed above along with their respective parameters The Text parameters are as follows the text font size color The Rectangle parameters are as follows width height color The Circle parameters are as follows radius color The Ellipse parameters are as follows width height color The Line parameters are as follows start x start y end x end y color The limit for the size of the object is the size of the movie itself which cannot be exceeded The atomic object declarations must be declared within the Movie block definition but outside of the Frame block definitions 3 8 5 Frame Block Definitions FrameDefinition Frame IntExpression StatementList The Frame block definitions are used to dictate what will happen within the amount of frames indicated by the integer value which can be an integer identifier or constant but must be non negative Within the Frame block definitions are any number of Place A
43. vailable helper tools we can use For the code generation stage we decide to use the developed backend programs the established assembly language and the parser as the main tools to run tests The main testing objective at this stage is to guarantee the proper execution of our Movie methods in F2 Thus we plan to run source code through the parser and then perform code generation Once this is done we use our WriteSWF java program to output the f2 file into a swf file and check the content with Flash Player 6 5 Actual implementation Grammar Walker To avoid compounding mistakes and error in our grammar we choose to perform testing parallel to programming development Upon the completion of each lexical rule we build the necessary walker to proceed with many sample implementations To display the hierarchy within these abstract syntax trees we output all related tree nodes for logic checking Only after all trials have been proven successful do we proceed again onto the next lexical rule After the lexer the parser and the walker have been completed we begin testing the entire grammar by writing sample codes We formulate different combinations of logical statements object declarations array declarations Movie declaration calls to test against the grammar By parsing out all the nodes and outputting them in the destined hierarchy order we are able to check the logical structure and ensure the proper structure of the grammar Back
44. wn in fixed width font Symbols are quoted to denote terminals separating from symbols used for the purposes of good formatting throughout the text S denotes that the 3 3 symbol S is optional S denotes that the symbol S may occur zero or more times S denotes that the symbol S will occur one or more times S T denotes a choice between the symbol sequences S and T Lexical Convention An F2 program can be stored as a stand alone movie file or it can import multiple F2 movie files to become a composite movie file A copy of each of these import units is stored into the program upon the calling of the embedded Insert function Programs are written using the Unicode character set accepted by the Java Virtual Machine which will be used to run the F2 compiler 3 3 1 Line Terminators Lines are terminated by the ASCII characters CR or LF or CR LF The two characters CR immediately followed by LF are counted as one line terminator not two LineTerminator The ASCII LF also known as newline The ASCII CR also known as return The ASCII CR followed by the ASCII LF 3 3 2 Tokens There are six classes of tokens identifiers keywords constants string literals operators and other separators Blanks horizontal tabs newlines form feeds and comments as described later are ignored except as they separate tokens Some white space is required to separate otherwise adjacent identifiers keywords and constants If the input stream

Download Pdf Manuals

image

Related Search

Authors authors authors guild authorship author\u0027s purpose authors publish authors like kristin hannah authors of project 2025 authorscale authorship definition authors like freida mcfadden authors of pain authors similar to freida mcfadden authors of the bible authorship guidelines authors like colleen hoover authors like lee child authors similar to kristin hannah authors similar to colleen hoover authors like john grisham authors like stephen king authors contribution authors kitchen + bar appleton authors adalah author support elsevier authorship attribution

Related Contents

HUMOR 20 + - E+E Elektronik Ges.m.b.H  Ryobi P531 Use and Care Manual  Master Lock 1500eD User's Manual  ASSMANN Electronic DN-19 TRAY-3-20U  PCS 60 User Manual - Thorntons Voice and Data  低温棟工作室使用内規  Stampa di fax a pagina intera  Solution 8 Installation Manual  

Copyright © All rights reserved.
Failed to retrieve file