Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик по ТЯП. Вариант 18.doc
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
107.01 Кб
Скачать

Министерство Образования и Науки Российской Федерации

Санкт-Петербургский Электротехнический Университет “ЛЭТИ ”

Кафедра МО ЭВМ

Описание входного языка

Вариант 18

Выполнил ст.гр.3351 Смирнов Е.А.

Проверил Лукина О.С.

Санкт-Петербург

2006 г.

Описание синтаксиса входного языка

<Programm>::={<ImportStatement>}<ClassDeclaration>

<ImportStatement>::=import <Identifier>.class;

<ClassDeclaration>::=class<Identifier><ClassBody>

<ClassBody>::={{<ClassBodyDeclarations>}}

<ClassBodyDeclaration>::=<FieldDeclaration> | <MethodDeclaration>

<FieldDeclaration>::=<Type><VariableDeclarator>;

<VariableDeclarator>::= <Identifier>|<Identifier>=<VariableInitializer>

<VariableInitializer>::= <IntegerNumber> | <FloatNumber> | <Char> |

<StringInitializer> | <ExpressionR> | <ObjectCreationExpression> | null

<ObjectCreationExpression>::=new <StructType> ()

<MethodDeclaration>::=<MethodHeader><MethodBody> | void main()<MethodBody>

<MethodHeader>::=<ResultType><MethodDeclorator>

<ResultType>::=<Type> | void

<Type>::=<BasicType> | <StructType>

<BasicType>::= int | float | char

<StructType>::= String | <Identifier>

<MethodDeclorator>::=<Identifier>([<FormalParameterList>])

<FormalParameterList>::=<FormalParameter>{,<FormalParameter>}

<FormalParameter>::=<Type><Identifier>

<MethodBody>::={{<BlockStatements>}}

<BlockStatement>::=<VariableDeclarator>|<Block>

<Block>::=<CompStatement> | <SimpleStatement>

<CompStatement>::={<SimpleStatement>{<SimpleStatement>}}

<SimpleStatement>::= If (<ParExpression>) <Block> [ else <Block>] |

while (<ParExpression>) <Block> |

return [<ExpressionR>]; |

<StatementExpression>;

<StatementExpression>::=<Assignment> | <CondAssignment> |

<PostIncrementExpression> | <PostDecrementExpression> |

<MethodInvocation> |

<Output> | <Input> |

<Label> | <gotoLabel>

<Label>::= <Identifier>:

<gotoLabel>::= goto <Identifier>;

<ParExpression>::=<ExpressionR><RelationOperator><ExpressionR> | equal(<ExpressionR>,<ExpressionR>)

<PostIncrementExpression>::=<Identifier>++

<PostDecrementExpression>::=<Identifier>--

<Assignment>::=<ExpressionL> = <ExpressionR>;

<CondAssignment>::= (<ParExpression>)? <ExpressionR>: <ExpressionR>;

<ExpressionL>::=<Identifier>{.<Identifier>}

<ExpressionR>::=<ExpressionR>+T | <ExpressionR>-T | <T>

<T>::=<T>*<P> | <T>/<P> | <P>

<P>::=(<ExpressionR>) | <Identifier> | <MethodInvokation> | <PostIncrementExpression> |

<PostDecrementExpression> | <Constant> | <ExpressionL> | <MethodInvokation>

<MethodInvokation>::=<Identifier>([<FactParameterList>]) |

length(<ExpressionR>)|

concat(<ExpressionR>,<ExpressionR>) |

replace(<ExpressionR>, <ExpressionR>, <ExpressionR>)|

find(<ExpressionR>, <ExpressionR>) |

substring(<ExpressionR>, <DigitSequence>, <DigitSequence>)

<FactParameterList>::=<FactParameter>{,<FactParameter>}

<FactParameter>::=<ExpressionR> | <Identifier>

<RelationOperator>::= < | > | <= | >= | == | !=

<Identifier>::=<Symbol> {<SymDig>}

<SymDig>::= <Symbol> | <Digit>

<Sign>::= -|+

<IntegerNumber>::=[<Sign>]<DigitSequence>

<FloatNumber>::=[<Sign>]<DigitSequence>.<DigitSequence>[EFloat]

<EFloat>::= E[<Sign>]<DigitSequence>

<Constant>::=<IntegerNumber> | <FloatNumber> | <Char> | <StringExpr>

<DigitSequence>::=<Digit> {<Digit>}

<Digit>::=1|2|3|4|5|6|7|8|9|0

<StringExpr>::={<SymDig>}

<Symbol>::=a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | w | x | y | z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | W | X | Y | Z | _

<Char>::=<Symbol>

<Input>::=<ExpressionL> = read();

<Output>::=write(<OutputList>);

<OutputList>::=<ExpressionR>[#<DigitSequence>]{, <ExpressionR>[#<DigitSequence>]}

Задание

Базовый язык – Java.

Базовые типы: целый, вещественный, символьный.

Структурированный тип: символьная строка.

Операции над строками: определение длины строки, конкатенация строк, замена подстроки в строке, поиск подстроки в строке, доступ к подстроке.

Дополнительные требования: функции, оператор new, операции ++, --, условный оператор присваивания.

Оператор цикла – с предусловием.

Перегрузка операций - разрешается.

Эквивалентность типов – структурная.

Класс грамматик – грамматики операторного предшествования.

Промежуточный язык – триады.

Семантика языка

Программа представляет собой множество пользовательских типов данных (далее - классов), находящихся в одном каталоге и связанных включением (import), один из которых обязательно имеет функцию-член с сигнатурой void main(). В каждом файле может быть описан только один класс. Класс имеет поля, которые могут быть членами-данными встроенных или же определяемых пользователем типов (разработанных классов) или членами-функциями (далее - просто функциями). Инициализация члена-данного может быть осуществлена во время объявления этого члена-данного. Поля класса должны иметь уникальные имена. Переменные, объявленные внутри одно блока должны иметь уникальные имена. Областью видимости локальной переменной является блок. Локальные переменные объявленные внутри блока перекрывают переменные с теми же именами, объявленными вне этого блока. Имя формально параметра функции также перекрывает имя переменной, объявленной как член-данное класса. Время жизни неименованных переменных (используемых в выражениях) ограничивается временем вычисления результата выражения. Время жизни локальной переменной ограничивается блоком, в котором она была определена.