Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Интерпретатор Добавлено: 20.07.06 21:05  

Автор вопроса:  Sacred Phoenix | ICQ: 304238252 

Ответить

  Ответы Всего ответов: 24  

Номер ответа: 16
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #16
Добавлено: 21.07.06 22:26
лексемы на HTML? блин, дожились...

Ответить

Номер ответа: 17
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #17
Добавлено: 22.07.06 23:51
Морфеус жжот.

Ответить

Номер ответа: 18
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #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-сайт: xury.zx6.ru
 Профиль | | #20
Добавлено: 23.07.06 20:30
ага, надо картинку нарисовать - типа Морфеус с огнемётом - типа и жжот и флеймит, что собсно одно и тоже (Flame = пламя)
Т.е. можно составить и не такую уж и простую формулу.

толку то... без Java Script HTML даже 2+2 не сможет сложить...

Ответить

Номер ответа: 21
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #21
Добавлено: 23.07.06 22:12
жжот и флеймит, что собсно одно и тоже (Flame = пламя)

Угу, это я и подразумевал. Для производных мало одного лексического анализатора, нужно еще и приведение подобных, иначе результирующая формула будет настолько монструозна, что вы плюнете и посчитаете на листочке :)

Ответить

Номер ответа: 22
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #22
Добавлено: 25.07.06 18:10
Во первых, скажи какую форму записи грамматики ты используешь(если можно скинь правила), а во вторых что-то я не вижу где у тебя описаны приоритетные скобки. Например, (1+2)*3. Здесь у сложения установлен более высокий приоритет за счёт скобок.

<IDENTIFIER> = "ABS" | "SIN" | "COS" | "TAN" | "SQR" | "ATN" | "LOG" | "SGN" | "INT"

 Если уж делать анализатор по всем правилам, то создаётся специальный словарь терминалов, в который входят все ключевые слова и знаки операций. Всё что не входит в словарь терминалов заносится лексическим анализатором(сканером) в таблицы литералов(констант) и идентификаторов(имён переменных, пользовательских процедур и т.п.).

 Ну и потом, чем ты собираешся эту грамматику парсить? Синтаксический анализатор у тебя есть? Или ты на регулярных выражениях строишь? В конце концов получается синтаксическое дерево по которому уже можно компилировать/интерпретировать. Или как там у тебя?

Ответить

Номер ответа: 23
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #23
Добавлено: 25.07.06 18:24
Вот например GDL из Programmar. Подразумеваю что он близок к RBNF(ISO/IEC 14977), хотя может и нет, я его ещё не изучил.
GDL Notation

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-сайт: basicproduction.nm.ru
 Профиль | | #24
Добавлено: 26.07.06 03:04
Вот собственно кое-какие общие правила РБНФ накопал. Откуда у тебя взялись плюсы в продукциях я так и не понял. Вот:
Варианты разделяются знаком |. Квадратные скобки [ и ] означают необязательность записанного внутри них выражения, а фигурные скобки { и } означают его повторение (возможно, 0 раз). Нетерминальные символы начинаются с за­главной буквы (например, Оператор). Терминальные символы или начинаются малой буквой (например, идент), или записываются целиком заглавными буквами (например, BEGIN), или заключаются в кавычки (например, ":=";).

Вот собственно сама грамматика для присвоения выражения переменной
<ASSIGN>::=<ID>"="<EXP>
<EXP>::=[<SIGN>]<TERM>{<SIGN><TERM>}
<SIGN>::="-"|"+"
<TERM>::=<FACTOR>{<KEYWORD><FACTOR>}
<KEYWORD>::="^"|"*"|"/"|"\"|"MOD"
<FACTOR>::=<ID>|";("[<EXP>]";)"

Под нетерминалом <ID> подразумеваются не только идентификаторы, но и литералы, которые описывать отдельно влом. Т.е. сюда входят и строчные(хотя здесь строчные никак) и числовые константы.
PS: Не уверен правда насчёт пустых скобок, но в крайнем случае в можно изменить продукцию на ";("<EXP>";)" убрав квадратные скобки.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам