fork(1) download
  1. // ragel -J Atoi.rl && javac Atoi.java && java Atoi 123 23 " -12" 21
  2. // output:
  3. // value = 12323
  4. // value = -1221
  5.  
  6. public class Atoi {
  7. %% machine atoi;
  8. %% write data;
  9.  
  10. int cs;
  11. boolean neg = false;
  12. long val = 0;
  13.  
  14. %% write init;
  15.  
  16. private void integerFound(final long val) {
  17. System.out.println("value = " + val);
  18. }
  19.  
  20. private void process(final char[] data) {
  21. int p = 0;
  22. int eof = 0;
  23. final int pe;
  24. if (data == null) {
  25. pe = 0;
  26. } else {
  27. pe = data.length;
  28. }
  29. %%{
  30. action set_neg {
  31. neg = true;
  32. }
  33.  
  34. action add_digit {
  35. val = val * 10 + (fc - '0');
  36. }
  37.  
  38. action readed {
  39. if (neg) {
  40. val *= -1;
  41. }
  42. integerFound(val);
  43. val = 0;
  44. neg = false;
  45. }
  46.  
  47. number = ('-'@set_neg|'+')? (digit@add_digit)+ %readed;
  48. main := number (' ' number)*;
  49. /tmp/Atoi.rl[ragel] ascii:112[0x70] pos: 1 line: 1:1/56
  50. :!cat Atoi.rl
  51. public class Atoi {
  52. %% machine atoi;
  53. %% write data;
  54.  
  55. int cs;
  56. boolean neg = false;
  57. long val = 0;
  58.  
  59. %% write init;
  60.  
  61. private void integerFound(final long val) {
  62. System.out.println("value = " + val);
  63. }
  64.  
  65. private void process(final char[] data) {
  66. int p = 0;
  67. int eof = 0;
  68. final int pe;
  69. if (data == null) {
  70. pe = 0;
  71. } else {
  72. pe = data.length;
  73. }
  74. %%{
  75. action set_neg {
  76. neg = true;
  77. }
  78.  
  79. action add_digit {
  80. val = val * 10 + (fc - '0');
  81. }
  82.  
  83. action readed {
  84. if (neg) {
  85. val *= -1;
  86. }
  87. integerFound(val);
  88. val = 0;
  89. neg = false;
  90. }
  91.  
  92. number = ('-'@set_neg|'+')? (digit@add_digit)+ %readed;
  93. main := number (' ' number)*;
  94. write exec;
  95. }%%
  96. }
  97.  
  98. public static void main(final String[] args) {
  99. Atoi atoi = new Atoi();
  100. for (int i = 0; i < args.length; ++i) {
  101. atoi.process(args[i].toCharArray());
  102. }
  103. atoi.process(null);
  104. }
  105. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty