Está en la página 1de 7

//falta los case-statement <Program> -> <ProgramHeader> <ProgramContent> <ProgramHeader> -> < % <TypeDefinitions> <VariableDeclarations> <FunctionDeclarations> %> |e <TypeDefinitions>

-> TYPE <TypeDefinitionList> | e <VariableDeclarations> -> VAR <VariableDeclarationList> | e <FunctionDeclarations> -> <FunctionDeclarationList> | e <TypeDefinitionList> -> <TypeDefinitions> <TypeDefinitionList > <TypeDefinitionList > -> <TypeDefinitionList> | e <TypeDefinition> -> id = <Type> ; <Type> -> id |ARRAY [ <DimensionList> ] OF <Type> | RECORD <VariableDeclarationList> END | INTEGER | REAL <DimensionList> -> int_lit..int_lit <DimensionList > <DimensionList > -> , <DimensionList> | e <VariableDeclarationList> -> <VariableDeclaration> <VariableDeclarationList > <VariableDeclarationList > -> <VariableDeclarationList> | e <VariableDeclaration> -> <IdentifierList> : <Type> ; <IdentifierList> -> id <IdentifierList > <IdentifierList > -> , <IdentifierList> | e <FunctionDeclarationList> -> <FunctionDeclaration> <FunctionDeclarationList > <FunctionDeclarationList > -> < FunctionDeclarationList> | e

<FunctionDeclaration> -> PROCEDURE id <Procedimiento> | FUNCTION id <Funcion> <Procedimiento> -> ; <VariableDeclarations> <CompoundStatement>

| ( <ParameterList> ) ; <VariableDeclarations> <CompoundStatement> <Funcion> -> : <Type> ; <VariableDeclarations> <CompoundStatement> | ( <ParameterList> ) : <Type> ; <VariableDeclarations> <CompoundStatement> <ParameterList> -> <ParameterReference> <VariableDeclaration> <ParameterList> | e <ParameterReference> -> VAR | e

<ProgramContent> -> HTML_TOKEN <ProgramContent> | <% <StatementList> %> <ProgramContent> |e <StatementList> -> <statement> <StatementList > <StatementList> -> ; <StatementList> |e

<statement> -> <simple-statement> | <structured-statement> |e <simple-statement> -> <assignment-statement> | <procedure-statement> <structured-statement> -> <compound-statement> | <iteration-statement> | <selection-statement> <iteration-statement> -> <for-statement> | <repeat-statement> | <while-statement> <selection-statement> -> <if-statement> | <if-else-statement> | <case-statement> <assignment-statement> -> ID ':=' <expression> <procedure-statement> -> <procedure-name> <procedure-statement> <procedure-statement> ->'(' <argument-list> ')' |e

<case-statement> -> 'CASE' <expression> 'OF' <case-clause-list> <case-statement > <case-statement > -> 'END' | ';' <default-case-clause> 'END' <default-case-clause> -> 'ELSE' <statement> <case-clause-list> -> <case-clause> ';' <case-clause-list > <case-clause-list > -> <case-clause-list> | e <case-clause> -> <constant> <case-clause1> <case-clause1> -> .. <constant> <case-clause2> ****************** corregir | , <case-clause> | : <statement> <case-clause2> -> , <case-clause> | : <statement> <compound-statement> -> 'BEGIN' <statement-list> 'END' <for-statement> -> 'FOR' ID ':=' <expression> <for-statement > <for-statement > -> 'TO' <expression> 'DO' <statement> | 'DOWNTO' <expression> 'DO' <statement> <if-statement> -> 'IF'<expression>'THEN'<statement> <else-statement> <else-statement> -> 'ELSE' <statement> |e <repeat-statement> -> 'REPEAT' <statement-list> 'UNTIL' <expression> <while-statement> -> 'WHILE' <expression> 'DO' <statement>

<expression> -> <relational-expression> <argument-list> -> <argument-list> ',' <expression> | <expression> <factor> -> '(' <expression> ')' | literal-constant | <function-call>

| <unary-expression> | <variable-reference> <field-name> -> ID <field-specifier> -> '.' <field-name> <function-call> -> <function-name> | <function-name> '(' ')' | <function-name> '(' <argument-list> ')' <function-name> -> ID <index> -> '[' <index-list> ']' <index-list> -> <expression> | <index-list> ',' <expression> //areglar esto <member-group> -> <expression> <member-group'> <member-group'> ->'..' <expression> |e
http://pascal.comsci.us/syntax/expression/bnf.html

<member-list> -> <member-group> //arreglar la recurson | <member-list> ',' <member-group> <Qualifier> -> <field-specifier> |<index> <relational-expression> ->
<simple-expression><relational-expression'>

<relational-expression'> relational-operator <simple-expression> |e <simple-expression> -> <term> <simple-expression'> <simple-expression'> ->additive-operator <simple-expression> |e <simple-variable-reference> -> <variable-name> <term> -> <factor> <term'> <term'> -> multiplicative-operator <term> |e <type-name> -> ID <unary-expression> -> unary-operator <factor>

<variable-reference> ->

<simple-variable-reference> <variable-reference'>

<variable-reference'> -> <qualifier> |e

TABLA SIMBOLOS HACER STRUCTURA HASH Y EN LA STRUCTURA : STRING TIPO

CREAR UN ARBOL PARA TIPO TODAS LAS CLASES HEREDAN A CLASE TIPO CLASE Tipo CLASS Primitivo TIPOPRIMITIVO tipo;// entero,real ,STRING bool,CHAR CLASS ARREGLO Tipo of; ArrayList <Limites> Dimension; Class registro Hashtable<string, tipo> campos; Ver el cdigo a bajo String Integer String Arreglo Reg

Tipo Primitivo t_int Primitiva t_str Array (1,2..1,5) Primitivo t_int Record [A y apunta a array,B y apunta a Primitivo t_str] Tipos

String cont b

TIPO Apunta a primitivo t_integer de arriba Apunta al record de arrbiba

TABLA SIMBOLOS TYPE Arreglo=array[1..2,1..5] of integer Reg=record A:arreglo; B:string; End; VAR

Cont:integer; B=reg; Traduccin dirigida de DIMENTION_LIST DE LA GRAMATICA <DimensionList> -> int_lit..int_lit , <DimensionList> | int_lit..int_lit. Sintetizar: 1. Arraylist<Limites> dimensin=new arraylist<limites>(); Dimensin.add(new limite(int_list1.valor,int_list2.valor)) dimensionList.dimension=dimension; 2. Arraylist<limites>dimension=dimensionList1.dimension Dimension.insert(0,new limites(int_lit1.valor,int_lit2.valor)) dimensionList.dimension=dimension

Type -> integer {type.tipo=Tipos[ Integer ] } | string {type.tipo=Tipos[ string ]} |id {id.lexema} |Array[DimensionList] of Type 3.) |Record VaribleDeclarationList END 4.) 3. Type.tipo=new Arreglo(DimensionList.dimension, Tipo1.tipo) 4. Typetipo=new registro(varibleDeclarationList.campos)

También podría gustarte