Comments (7)
Приближённая грамматика синтаксического анализатора:
<Root> :== <Expression> <Tail>
<Tail> :== <Cmp> <Expression> | Ɛ
<Cmp> :== <= | >= | ==
<Expression> :== <SubAdd> | <N> | <VF> | <Q> | string
<SubAdd> :== < + | - > <Expression>
<N> :== number <T '>
<T '> :== <T> | Ɛ
<T> :== <SubAdd> | <DivMul>
<DivMul> :== < * | / > <DMNext>
<DMNext> :== <N> | <VF> | <Q>
<VF> :== <Function> | <Variable>
<Function> :== var/func ( <Params> ) <T '>
<Variable> :== var/func <T '>
<Q> :== ( <Expression> ) <T '>
<Params> :== <Root> <More> // FIX !!!
<More> :== , <Root> | Ɛ // FIX !!!
from utp2017-5-excel.
Правильная грамматика
<Expression> :== <Compared> <ComparedRest>
<ComparedRest> :== <ComparisonOperator> <Compared> <ComparedRest> | ε
<ComparisonOperator> :== "=" | "<" | ">" | "<=" | ">="
<Compared> :== <Term> <Terms>
<Terms> :== "-" <Term> <Terms> | "+" <Term> <Terms> | ε
<Term> :== <Factor> <Factors>
<Factors> :== "*" <Factor> <Factors> | "/" <Factor> <Factors> | ε
<Factor> :== NUMBER | STRING | "TRUE" | "FALSE" | <Identifiable> | "(" <Expression> ")" | "-" <Factor>
<Identifiable> :== IDENTIFIER <Call>
<Call> :== "(" <Arguments> ")" | ε
<Arguments> :== <Expression> <ArgumentsRest> | ε
<ArgumentsRest> :== "," <Expression> <ArgumentsRest> | ε
from utp2017-5-excel.
Неправильная грамматика.
<Compared> :== <Term> <Terms>
<Terms> :== "-" <Term> <Terms> | "+" <Term> <Terms> | ε
<Term> :== <Factor> <Factors>
<Factors> :== "*" <Factor> <Factors> | "/" <Factor> <Factors> | ε
Эти правила нам дают такие странные арифметические выражения как -/3*2+*3
. А вот нормальное 1+2*3
описать ею нельзя.
from utp2017-5-excel.
<Expression> :== <Compared> <ComparedRest>
<ComparedRest> :== <ComparisonOperator> <Compared> <ComparedRest> | ε
Я правильно понял, что вы хотите как в Питоне: x < y < z
подразумевается x < y and y < z
?
from utp2017-5-excel.
Я правильно понял, что вы хотите как в Питоне: x < y < z подразумевается x < y and y < z?
Нет. Такая запись синтаксически корректна, но вернёт ошибку времени выполнения.
Она означает (x < y) < z
; первая функция <
вернёт значение типа boolean
, а вторая создаст ошибку несовместимости типов (boolean
и number
).
Например, в JS в такой записи при выполнении второго оператора <
результат выполнения первого приведётся к 0
/1
.
Неправильная грамматика.
Я попробовал составить дерево разбора данных выражений. Корректное выражение удалось разобрать, ваш контрпример даёт синтаксическую ошибку. Пожалуйста, укажите на ошибку в моих рассуждениях: http://puu.sh/x9J8D/08c6b301b8.jpg
from utp2017-5-excel.
Да, у меня ошибка, у вас всё правильно.
from utp2017-5-excel.
Обновление грамматики. Добавление поддержки диапазонов (Range).
<Expression> :== <Compared> <ComparedRest>
<ComparedRest> :== <ComparisonOperator> <Compared> <ComparedRest> | ε
<ComparisonOperator> :== "=" | "<" | ">" | "<=" | ">="
<Compared> :== <Term> <Terms>
<Terms> :== "-" <Term> <Terms> | "+" <Term> <Terms> | ε
<Term> :== <Factor> <Factors>
<Factors> :== "*" <Factor> <Factors> | "/" <Factor> <Factors> | ε
<Factor> :== NUMBER | STRING | "TRUE" | "FALSE" | <Identifiable> | "(" <Expression> ")" | "-" <Factor>
<Identifiable> :== IDENTIFIER <CallOrSpan>
<CallOrSpan> :== "(" <Arguments> ")" | ":" IDENTIFIER | ε
<Arguments> :== <Expression> <ArgumentsRest> | ε
<ArgumentsRest> :== "," <Expression> <ArgumentsRest> | ε
from utp2017-5-excel.
Related Issues (20)
- Разработка архитектуры проекта и распределение ролей HOT 1
- View: Базовый сайт
- Model: Базовая структура данных HOT 1
- Model logic: Вычисление формул
- Model logic: Лексический анализатор
- Model logic: Синтаксический анализатор
- Model logic: Вычисление формул
- Model logic: Проверка рекурсивных зависимостей в формулах
- Баги парсера HOT 1
- Ещё баги парсера HOT 1
- Нарушение индексирования формул
- Баг с поиском циклических зависимостей
- Диапазоны HOT 1
- Относительные и абсолютные адреса ячеек HOT 1
- Копирование ячейки HOT 1
- Добавление новых функций HOT 1
- Баги копирования ячеек
- Импорт и экспорт формата ячеек в .xlsx
- Итоги HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from utp2017-5-excel.