Страница: 1 | 2 |
Вопрос: Интерпретатор
Добавлено: 20.07.06 21:05
Автор вопроса: Sacred Phoenix | ICQ: 304238252
Ответы
Всего ответов: 24
Номер ответа: 16
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #16
Добавлено: 21.07.06 22:26
лексемы на HTML? блин, дожились...
Номер ответа: 17
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #17
Добавлено: 22.07.06 23:51
Морфеус жжот.
Номер ответа: 18
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #18
Добавлено: 23.07.06 15:11
Sacred Phoenix, а какие формулы ты хочешь вычислять в своем интерпритаторе? Если простые, типа x+(y*z), то смысла в этом нет - это можно сделать средствами VB. А если формулы с пределами и производными, то вещь реально нужная.
По поводу Lexer: ты бы лучше привел листинг этой функции, а не результат её работы.
Номер ответа: 19
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #19
Добавлено: 23.07.06 20:20
вот в том-то и дело, что её надо реализовать на vb. Какие формулы? В общем, действия (лексемы <ACTION>, функции (лексемы <IDENTIFIER>, две константы. Т.е. можно составить и не такую уж и простую формулу.
2 Sharp: нифига он не жжот, а просто флеймит((
Номер ответа: 20
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #20
Добавлено: 23.07.06 20:30
ага, надо картинку нарисовать - типа Морфеус с огнемётом - типа и жжот и флеймит, что собсно одно и тоже (Flame = пламя)
толку то... без Java Script HTML даже 2+2 не сможет сложить...
Номер ответа: 21
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #21
Добавлено: 23.07.06 22:12
Угу, это я и подразумевал. Для производных мало одного лексического анализатора, нужно еще и приведение подобных, иначе результирующая формула будет настолько монструозна, что вы плюнете и посчитаете на листочке
Номер ответа: 22
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #22
Добавлено: 25.07.06 18:10
Во первых, скажи какую форму записи грамматики ты используешь(если можно скинь правила), а во вторых что-то я не вижу где у тебя описаны приоритетные скобки. Например, (1+2)*3. Здесь у сложения установлен более высокий приоритет за счёт скобок.
Если уж делать анализатор по всем правилам, то создаётся специальный словарь терминалов, в который входят все ключевые слова и знаки операций. Всё что не входит в словарь терминалов заносится лексическим анализатором(сканером) в таблицы литералов(констант) и идентификаторов(имён переменных, пользовательских процедур и т.п.).
Ну и потом, чем ты собираешся эту грамматику парсить? Синтаксический анализатор у тебя есть? Или ты на регулярных выражениях строишь? В конце концов получается синтаксическое дерево по которому уже можно компилировать/интерпретировать. Или как там у тебя?
Номер ответа: 23
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #23
Добавлено: 25.07.06 18:24
Вот например GDL из Programmar. Подразумеваю что он близок к RBNF(ISO/IEC 14977), хотя может и нет, я его ещё не изучил.
The following table summarizes the notation used in GDL.
::= Defines a production rule
; A semicolon marks the end of a production rule
| A vertical bar denotes Disjunction (logical-OR)
" " Double quotes delimit a literal term
' ' Single quotes delimit a regular expression
[ ] Square brackets delimit an Optional term
{ } Curly brackets delimit a Repeater
* An asterisk denotes a Wildcard
< > Angle brackets delimit either a Length constraint, or
symbol attributes
^ A caret denotes Negation
( ) Parentheses are used for grouping terms
(? ) A question mark, within parentheses, delimit a
Parse constraint
Regular Expressions
The following characters have special meaning when used within regular expressions.
. Matches any single character, except for NULL ('\0')
" " Double quotes delimit a literal string
[ ] Square brackets delimit a character list. Within a character
list, the following additional meta-characters are defined:
- Indicates a range of matching character values.
^ When appearing as first character in list, matches any
character that is not in the list.
\ The escape character overrides any special meaning
associated with the character that follows it
( ) Parentheses group one or more regular expressions
together as a single expression
* Matches zero or more occurrences of the preceding
expression
+ Matches one or more occurrences of the preceding
expression
? Matches exactly zero or one occurrence of the preceding
expression
Номер ответа: 24
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #24
Добавлено: 26.07.06 03:04
Вот собственно кое-какие общие правила РБНФ накопал. Откуда у тебя взялись плюсы в продукциях я так и не понял. Вот:
Вот собственно сама грамматика для присвоения выражения переменной
<EXP>::=[<SIGN>]<TERM>{<SIGN><TERM>}
<SIGN>::="-"|"+"
<TERM>::=<FACTOR>{<KEYWORD><FACTOR>}
<KEYWORD>::="^"|"*"|"/"|"\"|"MOD"
<FACTOR>::=<ID>|""[<EXP>]""
Под нетерминалом <ID> подразумеваются не только идентификаторы, но и литералы, которые описывать отдельно влом. Т.е. сюда входят и строчные(хотя здесь строчные никак) и числовые константы.
PS: Не уверен правда насчёт пустых скобок, но в крайнем случае в можно изменить продукцию на ""<EXP>"" убрав квадратные скобки.