Куча говна / Говнокод #3204 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
#include <default.inc>

var a:float=0.0;
var b:float=0.0;
var c:float=0.0;
var d:float=0.0;
var x1:float=0.0;
var x2:float=0.0;

::no
	write 'Enter A: ';
	in a;
	write 'Enter B: ';
	in b;
	write 'Enter C: ';
	in c;
	write '$a*x^2+$b*x+c=0	[y/n]: ';
	var s:string='';
	string readline(s);
	if eq(s, 'y') yes : no;
	::yes
	math d='b*b-4*a*c';
	
if eq(d, 0) dzero : dnzero;
if low(d, 0) dex;

::dzero
	math x1='(-b)/(2*a)';
	writeln 'X = $x1';
	jump exit;

::dnzero
	math x1='(-b+Math.sqrt(d))/(2*a)';
	math x2='(-b-Math.sqrt(d))/(2*a)';
	write 'X1 = $x1		X2 = $x2';
	jump exit;

::dex
	write 'Don`t exist!';

::exit
	write 'Repeat? [y/n]';
	string readline(s);
	if eq(s, 'y') no;
	write 'Bye!';
	call readkey;

Программа развязывания квадратных уравнений на самодельном ЯП =)
Да, это не совсем ГК, но тем не менее смешно.
ЗЫ. В "default.inc" находятся ф-ции "write" и "readkey".

Запостил: FMB FMB, (Updated )

Комментарии (20) RSS

  • Если уж сам язык делал, то мог бы сделать нормальные операторы присваивания и сравнения. А не так, что оператор, выглядящий, как оператор сравнения, на самом деле присваивает, а сравнивающий выглдит в виде двух равенств (это вообще кто такое извращение придумал...).
    Ответить
    • Делал я яп когда даже не подозревал про существование yacc, конечных автоматов и прочей компиляторостроительной фигни. И весь парсинг программы делается при помощи регулярных выражений =)
      Ответить
  • а где тут говно?
    насколько я понял возможности языка не дадут написать лучше.
    ну да куча goto, а так вроде все адекватно
    Ответить
    • Я же написал: "Да, это не совсем ГК, но тем не менее смешно".
      Ответить
        • Вот маленькая часть интерпретатора:
          Regex ParseCMD = new Regex(@"\s*(?<func>[_a-zA-Z]+[_a-zA-Z0-9]*)\s+(?<operand>((\-|\+)?\d+(\.\d+)?)|.*?)\s*;\s*$");
          			Match cmdm = null;
          			SetDefConstant();
          			List<string> cmds = cmdslst;
          			cmds = ReplaceIncludes(cmds);
          			BuildLabelTree(cmds);
          			BuildFunctionList(cmds);
          			for (int CommandIndex = 0; CommandIndex < cmds.Count; CommandIndex++)
          			{
          					foreach (var Fi in funcs)
          					{
          						if (Fi.Value.FunctionStart == CommandIndex) CommandIndex = Fi.Value.FunctionEnd + 1;
          					}
          				if ((cmdm = ParseCMD.Match(cmds[CommandIndex])).Success)
          				{
          					string func = cmdm.Groups["func"].Value.ToLower(),
          						   operand = cmdm.Groups["operand"].Value;
          
          					switch (func)
          					{
          						case "in":
          							{
          								if (IsExistVar(operand))
          									vars[operand].SecondValue = ToDouble(Console.ReadLine().Replace('.', ','));
          							} break;
          
          // и так ещё 1000 строк кода
          Ответить
          • Да это нормально, у меня парсер тоже состоит из огромного числа else if.
            Правда, это только при считывании, там все строки переделываются во внутренние коды интерпретатора. А при вызове по кодам делается switch на 500 строчек.
            Ответить
            • нормально. Писал эмуль спекки на яве, не нашел ничего более подходящего, как свитч на околотого строк
              Ответить
  • позвольте, а зачем вам свой интерпретируемый скриптовый субьязык с интерпретатором на регекспах?
    я молчу про скорость выполнения скрипта, но еще сколько сил и времени грохать на разработку и отладку.....
    Ответить
    • На регексах потому, что другого метода на тот момент я не знал. Скорость мне была неважна, важен был результат.
      Ответить
        • Ну захотелось сделать что-то свое, и заодно узнать как же эти "лисапеды" изобретаются.
          Ответить
          • за стремление плюс, а за заодно... как говорится, "за изобретение пять, а по предмету неуд" - разве же на регекспах парсеры делают? если все еще интересно, почитайте, как делают другие
            Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8