SB Syntax analysis How ScriptBasic performs Syntax analysis.
-
Upload
valerie-greer -
Category
Documents
-
view
265 -
download
0
Transcript of SB Syntax analysis How ScriptBasic performs Syntax analysis.
S B
Syntax analysis
How ScriptBasic performs Syntax analysis
S B Contents
• 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
S B Who this presentation is for
• Curious (why things happen?)• Want to learn and understand how
ScriptBasic works• Want to modify ScriptBasicNOT for those, who just• want to program in scriba
S B Role of syntax analysis
• Reader• Lexer• SYNTAX ANALYSIS• Builder• Execution
S B 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
S B 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’
S B Tables defining syntax
• Binary operators• Unary operators• Built-in functions• Commands
– List of commands in the order syntax analyzer checks them against the lines
S B Creating the tables
• syntax.def is a readable format• syntaxer.pl creates the syntax.c• headerer.pl creates the syntax.h
files.
S B 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
S B 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;
S B Example
• GOTO: 'goto' label nl
• OpCode: CMD_GOTO– Parameter.CommandArgument.Argument.pNode
contains the node id of the line for label
S B Example
• ELSIF: 'else' 'if' * expression 'then' come_forward(IF) go_forward(IF) nl
• OpCode: CMD_ELSIF– Parameter.CommandArgument.Argument.pNode
contains the node id of the expression– Parameter.CommandArgument.next next
paremeter node:• Parameter.CommandArgument.Argument.pNode
where to go if expression fails
S B 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.
S B Pseudo terminals 2/10
• expression• expression_list
Handles an expression or a comma separated list of expressions and
creates nodes.
OWSWDE
S B Pseudo terminals 3/10
• string• integer• float
These are simple terminals.
S B 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)
S B Pseudo terminals 5/10
• lval a left value• lval_list a left value list separated
bycommas
• local local variable• local_list list of local variables
S B Pseudo terminals 6/10
• function a function name where it isdefined
• thisfn the name of the currentlydefined function or
procedure• arg_num placeholder to store the
number of arguments• local_start starts a local scope• local_end ends of local scope
S B Pseudo terminals 7/10
• label a label used in goto• label_def a label when defined
S B Pseudo terminals 8/10
• cname constant name• cvalconstant value corresponding
to constant nameThese do not generate code, have only
side effects defining a constant. (cval defines a constant for the name last
appeared for cname)
S B Pseudo terminals 9/10
• go_back creates code• go_forward creates code• come_back has side effect• come_forward has side effect
These are used instead of code bracketing. There is a jump stack
where node pointers are pushed and taken from.
S B Pseudo terminals 10/10
• * star character OWSWDE• noexec no code is generated from
the line
S B Special commands
• All lines are analyzed by the C function
ex_IsCommandThisexcept those defining special analysis function
• CALL/CALL (ex_IsCommandCALL)• OPEN/OPEN (ex_IsCommandOPEN)
S B
Thank you for listening