1 / 24

Syntax analysis

Syntax analysis. How ScriptBasic performs Syntax analysis. What is the role of syntax analysis What is the assumed syntax of a program What tables drive syntax analysis Creating the tables Pseudo terminals. Contents. Who this presentation is for. Curious (why things happen?)

Télécharger la présentation

Syntax analysis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.


Presentation Transcript

  1. Syntax analysis How ScriptBasic performs Syntax analysis

  2. What is the role of syntax analysis What is the assumed syntax of a program What tables drive syntax analysis Creating the tables Pseudo terminals Contents

  3. Who this presentation is for • Curious (why things happen?) • Want to learn and understand how ScriptBasic works • Want to modify ScriptBasic NOT for those, who just • want to program in scriba

  4. Role of syntax analysis • Reader • Lexer • SYNTAX ANALYSIS • Builder • Execution

  5. General purpose • The syntax analyzer is a general purpose table driven syntax analyzer that could be used for other syntaxes not hard coded for ScriptBasic • The first definition that fits is used. • Easy to maintain but slower than special purpose analyzer

  6. Syntax assumed • Program is series of lines • Lines are (usually) terminated by new line • A line is series of terminal and pseudo-terminal symbols • No block of code { } or BEGIN END • handled by go|come_forward|backward pseudo terminals • Predefined pseudo terminal symbols, like ‘expression’

  7. Tables defining syntax • Binary operators • Unary operators • Built-in functions • Commands • List of commands in the order syntax analyzer checks them against the lines

  8. Creating the tables • syntax.def is a readable format • syntaxer.pl creates the syntax.c • headerer.pl creates the syntax.h files.

  9. Terminals and pseudo terminals • ‘module’ is a terminal symbol (keyword) • nl is terminal symbol (character) • float is terminal symbol • lval, expression are pseudo terminals • can create complex code (one way street with dead end effect!) • can have side effect

  10. Code generated • Code is array of nodes • A node contains OpCode • list of command parameters (each is a node) • operands list (operators or function) • value (constant node) • Serial number (variable node) • start point and arguments (user defined function) • car and cdr values for list head nodes • See builder.c struct _cNODE;

  11. Example • GOTO: 'goto' label nl • OpCode: CMD_GOTO • Parameter.CommandArgument.Argument.pNodecontains the node id of the line for label

  12. Example • ELSIF: 'else' 'if' * expression 'then' come_forward(IF) go_forward(IF) nl • OpCode: CMD_ELSIF • Parameter.CommandArgument.Argument.pNodecontains the node id of the expression • Parameter.CommandArgument.next next paremeter node: • Parameter.CommandArgument.Argument.pNode where to go if expression fails

  13. Pseudo terminals 1/10 • nl • tab These are the simplest pseudo-terminal symbols, because they are real terminals, just hard to write into a text file.

  14. Pseudo terminals 2/10 • expression • expression_list Handles an expression or a comma separated list of expressions and creates nodes. OWSWDE

  15. Pseudo terminals 3/10 • string • integer • float These are simple terminals.

  16. Pseudo terminals 4/10 • symbol a symbol (in name space) • absolute_symbol an absolute symbol • name_space an absolute symbol that sets the name space (no code) • end_name_space end a name space (no code)

  17. Pseudo terminals 5/10 • lval a left value • lval_list a left value list separated by commas • local local variable • local_list list of local variables

  18. Pseudo terminals 6/10 • function a function name where it is defined • thisfn the name of the currently defined function or procedure • arg_num placeholder to store the number of arguments • local_start starts a local scope • local_end ends of local scope

  19. Pseudo terminals 7/10 • label a label used in goto • label_def a label when defined

  20. Pseudo terminals 8/10 • cname constant name • cval constant value correspondingtoconstant name These do not generate code, have only side effects defining a constant. (cval defines a constant for the name last appeared for cname)

  21. Pseudo terminals 9/10 • go_backcreates code • go_forwardcreates code • come_backhas side effect • come_forwardhas side effect These are used instead of code bracketing. There is a jump stack where node pointers are pushed and taken from.

  22. Pseudo terminals 10/10 • * star character OWSWDE • noexec no code is generated from the line

  23. Special commands • All lines are analyzed by the C functionex_IsCommandThisexcept those defining special analysis function • CALL/CALL (ex_IsCommandCALL) • OPEN/OPEN (ex_IsCommandOPEN)

  24. Thank you for listening

More Related