- 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 такого
dwarf_with_beer 14.02.2013 19:03 # +1
bormand 14.02.2013 19:35 # +6
Abbath 14.02.2013 19:54 # +4
dwarf_with_beer 14.02.2013 20:20 # +2
body90 15.02.2013 05:55 # 0
dwarf_with_beer 15.02.2013 07:59 # 0
Lure Of Chaos 17.02.2013 17:33 # +4
3.14159265 18.02.2013 12:23 # +3
Индус, быдлокодер со стажем, рахитектор, копипастер, пхпешник, крестоблядь итд..
roman-kashitsyn 18.02.2013 12:27 # +3
Непонятно, кто должен раздавать эти ачивки...
bormand 18.02.2013 12:44 # +3
bormand 14.02.2013 20:12 # 0
Вспоминается говнецо из моих первых программ на борманд паскале...
Abbath 14.02.2013 20:20 # 0
Lure Of Chaos 17.02.2013 17:34 # 0
guest 19.02.2013 12:59 # 0
Оно реально работает?
defecate-plusplus 19.02.2013 13:20 # +1
guest 19.02.2013 14:55 # 0
или это какая-то автогенерённая таблица для парсинга?
defecate-plusplus 19.02.2013 15:07 # +1
[8] - размерность одного элемента в чарах - очевидно, надо взять максимальную, чтобы любая строка смогла уместиться
[22] - размерность массива, в котором каждый элемент - [8] чаров
собственно [22] указывать в данном случае не было нужно - можно было бы обойтись и tab[][8] = { ... } - компилятор бы сам разрулил число элементов из декларации
такое указание явно будет нужно, тогда когда декларация будет меньше, чем мы заявляем число элементов для размещения (т.е. не наш случай)
надмозгом для этого быть не надо, достаточно прочитать первые страницы любой книжки по С
bormand 19.02.2013 15:15 # 0
defecate-plusplus 19.02.2013 15:22 # +2
если не принимать во внимание, что для студентоработы на тему "говнокомпилятор для сферического говнопаскалеязыка" этого массива, скорее всего, вообще быть не должно
bormand 19.02.2013 15:29 # 0
> этого массива, скорее всего, вообще быть не должно
Ага, в идеале flex + bison + пара дней на раскуривание = говноязык на коленке. Можно даже компиляцию в простой p-код успеть запилить...
defecate-plusplus 19.02.2013 15:38 # 0
учебный
препод генерит условие в виде РБНФ, а студентота потом его осчастливливает результатом
bormand 19.02.2013 15:52 # 0
http://www.youtube.com/watch?v=FwZO5tWCRjA
roman-kashitsyn 19.02.2013 15:44 # 0
bormand 19.02.2013 15:54 # 0
defecate-plusplus 19.02.2013 16:03 # 0
я помню буст.спирит2 по этому поводу осилил
тащемта перевод аст дерева в исполняемый вид не делал, и так хватило за глаза
Abbath 19.02.2013 17:45 # 0
roman-kashitsyn 19.02.2013 17:47 # 0
defecate-plusplus 19.02.2013 17:59 # +1
roman-kashitsyn 19.02.2013 18:02 # 0
defecate-plusplus 19.02.2013 18:06 # 0
кроме дерева ведь еще задача указать на точную синтаксическую ошибку с понятным человеку текстом, если она есть
roman-kashitsyn 19.02.2013 18:12 # 0
defecate-plusplus 19.02.2013 18:15 # 0
а clang, надеюсь, в будущем займет таки достойное место под солнцем
roman-kashitsyn 19.02.2013 18:25 # 0
Да, это точно. Хотел отыскать какой-нибудь свободный парсер плюсов, дабы зафорсить кодинг-стайл в местных проектах автоматическим стайл-чекером. Не нашёл ничего вменяемого и понял, что задача совершенно не тривиальна.
bormand 19.02.2013 18:30 # 0
Ну сейчас, емнип, пошла мода кланг прикручивать в качестве парсера, т.к. его фронтенд в отличие от gcc'шного вполне прикручиваем... А задача очень даже нетривиальна. Особенно парсинг кресто11блядской кресто11грамматики...
roman-kashitsyn 19.02.2013 18:37 # +1
Толе дело хацкель, где парсер в одном шаге от программиста...про лисп я вообще молчу
Abbath 19.02.2013 18:26 # 0
bormand 19.02.2013 18:53 # 0
Abbath 19.02.2013 18:26 # 0
roman-kashitsyn 19.02.2013 18:27 # 0
Abbath 19.02.2013 18:31 # 0
bormand 19.02.2013 18:45 # 0
Видимо он тупо replace'ом менял ключевые слова на сишные и отдавал полученный сырец gcc, вот и стыдно теперь показать ;)
3.14159265 19.02.2013 18:55 # 0
Зачем? Можно просто заинклюдить дефайны и скормить gcc.
bormand 19.02.2013 19:00 # 0
Оптимизирующий компилятор за 10 минут ;)
3.14159265 19.02.2013 19:19 # +1
А всё что забудет передефайнить - будет недокументироваными фичами языка.
bormand 19.02.2013 19:34 # +2
Ага, язык совершенно случайно будет поддерживать крестошаблоны и другие крестофичи.
Abbath 19.02.2013 19:15 # 0
bormand 19.02.2013 19:33 # +3
Апофеоз копирастии.
3.14159265 19.02.2013 18:16 # 0
Самые продвинутые могли ограничится советом-замечанием. Более того, оригинальный, короткий код с использованием хаков часто вызывал больше вопросов и придирок.
Но помню была другая херь - минимальное ограничение на объем работы.
Типа 50 листов и не меньше.
Данный код поставленную задачу по маранию бумаги выполняет.
Abbath 19.02.2013 18:29 # 0
bormand 19.02.2013 18:32 # +1
guest 19.02.2013 15:55 # 0
bormand 19.02.2013 15:07 # 0
22 слова, в каждом максимум 7 букв, что тут сложного?
AAypEIq 24.08.2021 23:12 # 0