- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
char tab1[22][8]={"program","var","begin","end","int","float","bool","if","then","else","for","to","do","while","readln","writeln","as","||","!","&&","true","false"};
char tab2[18][3]={"==","<",">","+","-","*","/","(",")",".",",",";"," ","!=","<=",">=",10};
//Много кода
if(!strcmp("program",st.top())&&!strcmp("program",&mas[j][0]))
{
st.pop();
j++;
}
else
if(!strcmp("var",st.top())&&!strcmp("var",&mas[j][0]))
{
st.pop();
j++;
}
else
if(!strcmp("begin",st.top())&&!strcmp("begin",&mas[j][0]))
{
st.pop();
j++;
}
else
if(!strcmp("end",st.top())&&!strcmp("end",&mas[j][0]))
{
st.pop();
j++;
}
else
if(!strcmp("int",st.top())&&!strcmp("int",&mas[j][0]))
{
st.pop();
j++;
}
else
if(!strcmp("float",st.top())&&!strcmp("float",&mas[j][0]))
{
st.pop();
j++;
}
//Еще строк 200 такого
Индус, быдлокодер со стажем, рахитектор, копипастер, пхпешник, крестоблядь итд..
Непонятно, кто должен раздавать эти ачивки...
Вспоминается говнецо из моих первых программ на борманд паскале...
Оно реально работает?
или это какая-то автогенерённая таблица для парсинга?
[8] - размерность одного элемента в чарах - очевидно, надо взять максимальную, чтобы любая строка смогла уместиться
[22] - размерность массива, в котором каждый элемент - [8] чаров
собственно [22] указывать в данном случае не было нужно - можно было бы обойтись и tab[][8] = { ... } - компилятор бы сам разрулил число элементов из декларации
такое указание явно будет нужно, тогда когда декларация будет меньше, чем мы заявляем число элементов для размещения (т.е. не наш случай)
надмозгом для этого быть не надо, достаточно прочитать первые страницы любой книжки по С
если не принимать во внимание, что для студентоработы на тему "говнокомпилятор для сферического говнопаскалеязыка" этого массива, скорее всего, вообще быть не должно
> этого массива, скорее всего, вообще быть не должно
Ага, в идеале flex + bison + пара дней на раскуривание = говноязык на коленке. Можно даже компиляцию в простой p-код успеть запилить...
учебный
препод генерит условие в виде РБНФ, а студентота потом его осчастливливает результатом
http://www.youtube.com/watch?v=FwZO5tWCRjA
я помню буст.спирит2 по этому поводу осилил
тащемта перевод аст дерева в исполняемый вид не делал, и так хватило за глаза
кроме дерева ведь еще задача указать на точную синтаксическую ошибку с понятным человеку текстом, если она есть
а clang, надеюсь, в будущем займет таки достойное место под солнцем
Да, это точно. Хотел отыскать какой-нибудь свободный парсер плюсов, дабы зафорсить кодинг-стайл в местных проектах автоматическим стайл-чекером. Не нашёл ничего вменяемого и понял, что задача совершенно не тривиальна.
Ну сейчас, емнип, пошла мода кланг прикручивать в качестве парсера, т.к. его фронтенд в отличие от gcc'шного вполне прикручиваем... А задача очень даже нетривиальна. Особенно парсинг кресто11блядской кресто11грамматики...
Толе дело хацкель, где парсер в одном шаге от программиста...про лисп я вообще молчу
Видимо он тупо replace'ом менял ключевые слова на сишные и отдавал полученный сырец gcc, вот и стыдно теперь показать ;)
Зачем? Можно просто заинклюдить дефайны и скормить gcc.
Оптимизирующий компилятор за 10 минут ;)
А всё что забудет передефайнить - будет недокументироваными фичами языка.
Ага, язык совершенно случайно будет поддерживать крестошаблоны и другие крестофичи.
Апофеоз копирастии.
Самые продвинутые могли ограничится советом-замечанием. Более того, оригинальный, короткий код с использованием хаков часто вызывал больше вопросов и придирок.
Но помню была другая херь - минимальное ограничение на объем работы.
Типа 50 листов и не меньше.
Данный код поставленную задачу по маранию бумаги выполняет.
22 слова, в каждом максимум 7 букв, что тут сложного?