Какое учебное руководство Вы рекомендовали бы изучить PowerPoint VBA? [закрытый]

Твердый путь

Вы хотите синтаксический анализатор с рекурсивным спуском .

Для получения приоритета необходимо думать рекурсивно, например, с помощью демонстрационной строки,

1+11*5

, чтобы сделать это вручную, необходимо было бы читать эти 1, затем видеть плюс и запустить совершенно новый рекурсивный синтаксический анализ "сессия", запускающаяся с 11... и удостовериться, что проанализировали 11 * 5 в его собственный фактор, приводя к дереву синтаксического анализа с 1 + (11 * 5).

это все чувства, настолько болезненные даже, чтобы попытаться объяснить, особенно с добавленной беспомощностью C. Посмотрите после парсинга этих 11, если бы * был на самом деле + то вместо этого, необходимо было бы отказаться от попытки создания термина и вместо этого проанализировать 11 самого как фактор. Моя голова уже взрывается. Это возможно с рекурсивной достойной стратегией, но существует лучший путь...

легкое (справа) путь

при использовании инструмента GPL как Бизон Вы, вероятно, не должны волноваться о лицензировании проблем, так как код C, сгенерированный бизоном, не покрыт GPL (IANAL, но я - вполне уверенные инструменты GPL, не вызывают GPL на сгенерированном коде/двоичных файлах; например, код компиляций Apple как говорит, Апертура с GCC, и они продают его, не имея необходимость к GPL, сказал код).

Бизон Загрузки (или что-то эквивалентное, ANTLR, и т.д.).

обычно существует некоторый пример кода, что можно просто работать на бизоне и получить желаемый код C, который демонстрирует эти четыре функциональных калькулятора:

http://www.gnu.org/software/bison/manual/html_node/Infix-Calc.html

Взгляд на сгенерированный код, и видит, что это не столь легко, как это звучит. Кроме того, преимущества использования инструмента как Бизон 1), Вы изучаете что-то (особенно, если Вы читаете, Дракон заказывают и узнают о грамматиках), 2) Вы избегаете NIH, пытающийся перестроить колесо. С реальным инструментом парсера-генератора у Вас на самом деле есть надежда при увеличении масштаба позже, показывая другим людям, Вы знаете, что синтаксические анализаторы являются доменом парсинга инструментов.

Обновление:

Люди здесь дали много разумного совета. Мое единственное предупреждение против пропуска инструментов парсинга или просто использования алгоритма Сортировочной станции или скрученного вручную рекурсивного достойного синтаксического анализатора состоит в том, что небольшие игрушечные языки 1 глоток> могут когда-нибудь превратиться в большие фактические языки с функциями (грех, потому что, журнал) и переменные, условия и для циклов.

Flex/бизон может быть излишеством для маленького, простого интерпретатора, но тот от parser+evaluator может доставить неприятности по линии, когда изменения должны быть внесены, или опции должны быть добавлены. Ваша ситуация будет варьироваться, и необходимо будет использовать решение; просто не делайте , наказывают других людей за Ваши грехи [2] глоток> и создают меньше, чем соответствующий инструмент.

Мой любимый инструмент для парсинга

лучший инструмент в мире для задания библиотека Parsec (для рекурсивных достойных синтаксических анализаторов), который идет с языком программирования Haskell. Это много походит BNF, или как некоторый специализированный инструмент или предметно-ориентированный язык для парсинга (примера кода [3]), но это - на самом деле просто обычная библиотека в Haskell, означая, что это компилирует на том же шаге сборки как остальная часть Вашего кода Haskell, и можно записать произвольный код Haskell и вызов, что в рамках синтаксического анализатора, и Вы можете смешивание и подгонка другие библиотеки все в том же коде . (Встраивание языка парсинга как это на языке кроме Haskell приводит к загрузкам синтаксического хлама, между прочим. Я сделал это в C#, и он работает вполне хорошо, но это не так симпатично и сжато.)

Примечания:

1 Richard Stallman говорит, в [1 116], Почему Вы не должны использовать Tcl

, который основной урок Emacs - то, что язык для расширений не должен быть простым "дополнительным языком". Это должен быть реальный язык программирования, разработанный для записи и поддержания существенных программ. Поскольку люди захотят сделать это!

[2] Да, я навсегда травмирован от использования того "языка".

Также примечание, что, когда я отправил эту запись, предварительный просмотр был корректен, но меньше SO, чем соответствующий синтаксический анализатор съели мой близкий тег привязки в первом абзаце , доказав, что синтаксические анализаторы не что-то, чтобы шутиться с тем, потому что при использовании regexes и один от взломов Вы, вероятно, получите что-то тонкое и маленькое, неправильное .

[3] Отрывок синтаксического анализатора Haskell с помощью Парсека: четыре функциональных калькулятора расширяются с помощью экспонент, круглых скобок, пробела для умножения и констант (как пи и e).

aexpr   =   expr `chainl1` toOp
expr    =   optChainl1 term addop (toScalar 0)
term    =   factor `chainl1` mulop
factor  =   sexpr  `chainr1` powop
sexpr   =   parens aexpr
        <|> scalar
        <|> ident

powop   =   sym "^" >>= return . (B Pow)
        <|> sym "^-" >>= return . (\x y -> B Pow x (B Sub (toScalar 0) y))

toOp    =   sym "->" >>= return . (B To)

mulop   =   sym "*" >>= return . (B Mul)
        <|> sym "/" >>= return . (B Div)
        <|> sym "%" >>= return . (B Mod)
        <|>             return . (B Mul)

addop   =   sym "+" >>= return . (B Add) 
        <|> sym "-" >>= return . (B Sub)

scalar = number >>= return . toScalar

ident  = literal >>= return . Lit

parens p = do
             lparen
             result <- p
             rparen
             return result
7
задан brilliant 16 August 2013 в 17:14
поделиться

3 ответа

Часто задаваемые вопросы о ppt - это хороший вариант для начала.

Хороший источник примеров

Если вы уже знаете свой путь, вы можете использовать msdn учебник

5
ответ дан 6 December 2019 в 23:07
поделиться

Посмотрите этот список и эти образцы.

3
ответ дан 6 December 2019 в 23:07
поделиться

PowerPoint и VBA для PPTLive похоже на хорошее место для начала.

3
ответ дан 6 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: