ruco-cpp 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +17 -0
  3. data/bin/console +14 -0
  4. data/bin/ruco +30 -0
  5. data/bin/setup +7 -0
  6. data/data/ruco/Parser.frame +359 -0
  7. data/data/ruco/Scanner.frame +896 -0
  8. data/data/ruco/picojson/Changes +14 -0
  9. data/data/ruco/picojson/LICENSE +25 -0
  10. data/data/ruco/picojson/Makefile +8 -0
  11. data/data/ruco/picojson/README.mkdn +183 -0
  12. data/data/ruco/picojson/examples/github-issues.cc +110 -0
  13. data/data/ruco/picojson/examples/iostream.cc +70 -0
  14. data/data/ruco/picojson/examples/streaming.cc +76 -0
  15. data/data/ruco/picojson/picojson.h +1299 -0
  16. data/ext/cocor/Action.cpp +81 -0
  17. data/ext/cocor/Action.h +59 -0
  18. data/ext/cocor/ArrayList.cpp +79 -0
  19. data/ext/cocor/ArrayList.h +52 -0
  20. data/ext/cocor/BitArray.cpp +156 -0
  21. data/ext/cocor/BitArray.h +68 -0
  22. data/ext/cocor/CharClass.cpp +42 -0
  23. data/ext/cocor/CharClass.h +48 -0
  24. data/ext/cocor/CharSet.cpp +166 -0
  25. data/ext/cocor/CharSet.h +68 -0
  26. data/ext/cocor/Coco.atg +528 -0
  27. data/ext/cocor/Coco.cpp +173 -0
  28. data/ext/cocor/Comment.cpp +45 -0
  29. data/ext/cocor/Comment.h +51 -0
  30. data/ext/cocor/Copyright.frame +27 -0
  31. data/ext/cocor/DFA.cpp +865 -0
  32. data/ext/cocor/DFA.h +132 -0
  33. data/ext/cocor/Generator.cpp +182 -0
  34. data/ext/cocor/Generator.h +61 -0
  35. data/ext/cocor/Graph.h +59 -0
  36. data/ext/cocor/HashTable.cpp +115 -0
  37. data/ext/cocor/HashTable.h +84 -0
  38. data/ext/cocor/Makefile +11 -0
  39. data/ext/cocor/Melted.cpp +39 -0
  40. data/ext/cocor/Melted.h +51 -0
  41. data/ext/cocor/Node.cpp +69 -0
  42. data/ext/cocor/Node.h +86 -0
  43. data/ext/cocor/Parser.cpp +925 -0
  44. data/ext/cocor/Parser.frame +326 -0
  45. data/ext/cocor/Parser.h +153 -0
  46. data/ext/cocor/ParserGen.cpp +486 -0
  47. data/ext/cocor/ParserGen.h +99 -0
  48. data/ext/cocor/Position.cpp +37 -0
  49. data/ext/cocor/Position.h +46 -0
  50. data/ext/cocor/README.md +12 -0
  51. data/ext/cocor/Scanner.cpp +833 -0
  52. data/ext/cocor/Scanner.frame +897 -0
  53. data/ext/cocor/Scanner.h +291 -0
  54. data/ext/cocor/Sets.h +84 -0
  55. data/ext/cocor/SortedList.cpp +141 -0
  56. data/ext/cocor/SortedList.h +68 -0
  57. data/ext/cocor/State.cpp +77 -0
  58. data/ext/cocor/State.h +55 -0
  59. data/ext/cocor/StringBuilder.cpp +88 -0
  60. data/ext/cocor/StringBuilder.h +29 -0
  61. data/ext/cocor/Symbol.cpp +61 -0
  62. data/ext/cocor/Symbol.h +70 -0
  63. data/ext/cocor/Tab.cpp +1248 -0
  64. data/ext/cocor/Tab.h +245 -0
  65. data/ext/cocor/Target.cpp +41 -0
  66. data/ext/cocor/Target.h +48 -0
  67. data/ext/cocor/build.bat +3 -0
  68. data/ext/cocor/build.sh +4 -0
  69. data/ext/cocor/coc.bat +1 -0
  70. data/ext/cocor/coc.sh +2 -0
  71. data/ext/cocor/cocor_ruby_ext.cpp +124 -0
  72. data/ext/cocor/cygBuild.bat +1 -0
  73. data/ext/cocor/extconf.rb +5 -0
  74. data/ext/cocor/mingwbuild.bat +2 -0
  75. data/ext/cocor/mkmf.log +57 -0
  76. data/ext/cocor/zipsources.bat +1 -0
  77. data/lib/cocor.rb +14 -0
  78. data/lib/ruco/version.rb +3 -0
  79. data/lib/ruco.rb +728 -0
  80. metadata +195 -0
data/ext/cocor/State.h ADDED
@@ -0,0 +1,55 @@
1
+ /*-------------------------------------------------------------------------
2
+ Compiler Generator Coco/R,
3
+ Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz
4
+ extended by M. Loeberbauer & A. Woess, Univ. of Linz
5
+ ported to C++ by Csaba Balazs, University of Szeged
6
+ with improvements by Pat Terry, Rhodes University
7
+
8
+ This program is free software; you can redistribute it and/or modify it
9
+ under the terms of the GNU General Public License as published by the
10
+ Free Software Foundation; either version 2, or (at your option) any
11
+ later version.
12
+
13
+ This program is distributed in the hope that it will be useful, but
14
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16
+ for more details.
17
+
18
+ You should have received a copy of the GNU General Public License along
19
+ with this program; if not, write to the Free Software Foundation, Inc.,
20
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
+
22
+ As an exception, it is allowed to write an extension of Coco/R that is
23
+ used as a plugin in non-free software.
24
+
25
+ If not otherwise stated, any source code generated by Coco/R (other than
26
+ Coco/R itself) does not fall under the GNU General Public License.
27
+ -------------------------------------------------------------------------*/
28
+
29
+ #if !defined(COCO_STATE_H__)
30
+ #define COCO_STATE_H__
31
+
32
+ #include "Symbol.h"
33
+
34
+ namespace Coco {
35
+
36
+ class Action;
37
+
38
+ class State // state of finite automaton
39
+ {
40
+ public:
41
+ int nr; // state number
42
+ Action *firstAction; // to first action of this state
43
+ Symbol *endOf; // recognized token if state is final
44
+ bool ctx; // true if state is reached via contextTrans
45
+ State *next;
46
+
47
+ State();
48
+ void AddAction(Action *act);
49
+ void DetachAction(Action *act);
50
+ void MeltWith(State *s);
51
+ };
52
+
53
+ }; // namespace
54
+
55
+ #endif // !defined(COCO_STATE_H__)
@@ -0,0 +1,88 @@
1
+ /*-------------------------------------------------------------------------
2
+ Compiler Generator Coco/R,
3
+ Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz
4
+ extended by M. Loeberbauer & A. Woess, Univ. of Linz
5
+ ported to C++ by Csaba Balazs, University of Szeged
6
+ with improvements by Pat Terry, Rhodes University
7
+
8
+ This program is free software; you can redistribute it and/or modify it
9
+ under the terms of the GNU General Public License as published by the
10
+ Free Software Foundation; either version 2, or (at your option) any
11
+ later version.
12
+
13
+ This program is distributed in the hope that it will be useful, but
14
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16
+ for more details.
17
+
18
+ You should have received a copy of the GNU General Public License along
19
+ with this program; if not, write to the Free Software Foundation, Inc.,
20
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
+
22
+ As an exception, it is allowed to write an extension of Coco/R that is
23
+ used as a plugin in non-free software.
24
+
25
+ If not otherwise stated, any source code generated by Coco/R (other than
26
+ Coco/R itself) does not fall under the GNU General Public License.
27
+ -------------------------------------------------------------------------*/
28
+
29
+ #include <string.h>
30
+ #include "StringBuilder.h"
31
+ #include "Scanner.h"
32
+
33
+ namespace Coco {
34
+
35
+ void StringBuilder::Init(int capacity) {
36
+ length = 0;
37
+ this->capacity = capacity;
38
+ data = new wchar_t[capacity + 1];
39
+ data[0] = 0;
40
+ }
41
+
42
+ StringBuilder::StringBuilder(int capacity) {
43
+ Init(capacity);
44
+ }
45
+
46
+ StringBuilder::StringBuilder(const wchar_t *val) {
47
+ capacity = length = wcslen(val);
48
+ Init(capacity);
49
+ wcscpy(data, val);
50
+ }
51
+
52
+ StringBuilder::~StringBuilder() {
53
+ if (data != NULL) {
54
+ delete [] data;
55
+ data = NULL;
56
+ length = 0;
57
+ capacity = 0;
58
+ }
59
+ }
60
+
61
+ void StringBuilder::Append(const wchar_t value) {
62
+ if (length == capacity) {
63
+ int oldCap = capacity;
64
+ capacity = capacity * 2;
65
+ wchar_t *nData = new wchar_t[capacity + 1];
66
+ memcpy(nData, data, oldCap * sizeof(int));
67
+ delete [] data;
68
+ data = nData;
69
+ }
70
+
71
+ data[length] = value;
72
+ length++;
73
+ data[length] = '\0';
74
+ }
75
+
76
+ void StringBuilder::Append(const wchar_t *value) {
77
+ if (length + (int)wcslen(value) < capacity) {
78
+ wcscpy(data + length, value);
79
+ length += wcslen(value);
80
+ }
81
+ }
82
+
83
+
84
+ wchar_t* StringBuilder::ToString() {
85
+ return coco_string_create(data);
86
+ }
87
+
88
+ }; // namespace
@@ -0,0 +1,29 @@
1
+ #if !defined(COCO_STRINGBUILDER_H__)
2
+ #define COCO_STRINGBUILDER_H__
3
+
4
+ #include<stddef.h>
5
+
6
+ namespace Coco {
7
+
8
+ class StringBuilder
9
+ {
10
+ public:
11
+ StringBuilder(int capacity = 32);
12
+ StringBuilder(const wchar_t *val);
13
+
14
+ virtual ~StringBuilder();
15
+ void Append(const wchar_t val);
16
+ void Append(const wchar_t *val);
17
+ wchar_t* ToString();
18
+ int GetLength() { return length; };
19
+
20
+ private:
21
+ void Init(int capacity);
22
+ wchar_t *data;
23
+ int capacity;
24
+ int length;
25
+ };
26
+
27
+ }; // namespace
28
+
29
+ #endif // !defined(COCO_STRINGBUILDER_H__)
@@ -0,0 +1,61 @@
1
+ /*-------------------------------------------------------------------------
2
+ Compiler Generator Coco/R,
3
+ Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz
4
+ extended by M. Loeberbauer & A. Woess, Univ. of Linz
5
+ ported to C++ by Csaba Balazs, University of Szeged
6
+ with improvements by Pat Terry, Rhodes University
7
+
8
+ This program is free software; you can redistribute it and/or modify it
9
+ under the terms of the GNU General Public License as published by the
10
+ Free Software Foundation; either version 2, or (at your option) any
11
+ later version.
12
+
13
+ This program is distributed in the hope that it will be useful, but
14
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16
+ for more details.
17
+
18
+ You should have received a copy of the GNU General Public License along
19
+ with this program; if not, write to the Free Software Foundation, Inc.,
20
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
+
22
+ As an exception, it is allowed to write an extension of Coco/R that is
23
+ used as a plugin in non-free software.
24
+
25
+ If not otherwise stated, any source code generated by Coco/R (other than
26
+ Coco/R itself) does not fall under the GNU General Public License.
27
+ -------------------------------------------------------------------------*/
28
+
29
+ #include "Symbol.h"
30
+ #include "Scanner.h"
31
+
32
+ namespace Coco {
33
+
34
+ int Symbol::fixedToken = 0;
35
+ int Symbol::classToken = 1;
36
+ int Symbol::litToken = 2;
37
+ int Symbol::classLitToken = 3;
38
+
39
+
40
+ Symbol::Symbol(int typ, const wchar_t* name, int line) {
41
+ n = 0;
42
+ graph = NULL;
43
+ tokenKind = 0;
44
+ deletable = false;
45
+ firstReady = false;
46
+ first = NULL;
47
+ follow = NULL;
48
+ nts = NULL;
49
+ attrPos = NULL;
50
+ semPos = NULL;
51
+
52
+ this->typ = typ;
53
+ this->name = coco_string_create(name);
54
+ this->line = line;
55
+ }
56
+
57
+ Symbol::~Symbol() {
58
+ coco_string_delete(name);
59
+ }
60
+
61
+ }; // namespace
@@ -0,0 +1,70 @@
1
+ /*-------------------------------------------------------------------------
2
+ Compiler Generator Coco/R,
3
+ Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz
4
+ extended by M. Loeberbauer & A. Woess, Univ. of Linz
5
+ ported to C++ by Csaba Balazs, University of Szeged
6
+ with improvements by Pat Terry, Rhodes University
7
+
8
+ This program is free software; you can redistribute it and/or modify it
9
+ under the terms of the GNU General Public License as published by the
10
+ Free Software Foundation; either version 2, or (at your option) any
11
+ later version.
12
+
13
+ This program is distributed in the hope that it will be useful, but
14
+ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16
+ for more details.
17
+
18
+ You should have received a copy of the GNU General Public License along
19
+ with this program; if not, write to the Free Software Foundation, Inc.,
20
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
+
22
+ As an exception, it is allowed to write an extension of Coco/R that is
23
+ used as a plugin in non-free software.
24
+
25
+ If not otherwise stated, any source code generated by Coco/R (other than
26
+ Coco/R itself) does not fall under the GNU General Public License.
27
+ -------------------------------------------------------------------------*/
28
+
29
+ #if !defined(COCO_SYMBOL_H__)
30
+ #define COCO_SYMBOL_H__
31
+
32
+ #include "Position.h"
33
+ #include "Scanner.h"
34
+
35
+ namespace Coco {
36
+
37
+ class Node;
38
+ class BitArray;
39
+
40
+ class Symbol {
41
+ public:
42
+ // token kinds
43
+ static int fixedToken; // e.g. 'a' ('b' | 'c') (structure of literals)
44
+ static int classToken; // e.g. digit {digit} (at least one char class)
45
+ static int litToken; // e.g. "while"
46
+ static int classLitToken; // e.g. letter {letter} but without literals that have the same structure*/
47
+
48
+ int n; // symbol number
49
+ int typ; // t, nt, pr, unknown, rslv /* ML 29_11_2002 slv added */ /* AW slv --> rslv */
50
+ wchar_t *name; // symbol name
51
+ Node *graph; // nt: to first node of syntax graph
52
+ int tokenKind; // t: token kind (fixedToken, classToken, ...)
53
+ bool deletable; // nt: true if nonterminal is deletable
54
+ bool firstReady; // nt: true if terminal start symbols have already been computed
55
+ BitArray *first; // nt: terminal start symbols
56
+ BitArray *follow; // nt: terminal followers
57
+ BitArray *nts; // nt: nonterminals whose followers have to be added to this sym
58
+ int line; // source text line number of item in this node
59
+ Position *attrPos; // nt: position of attributes in source text (or null)
60
+ Position *semPos; // pr: pos of semantic action in source text (or null)
61
+ // nt: pos of local declarations in source text (or null)
62
+
63
+
64
+ Symbol(int typ, const wchar_t* name, int line);
65
+ virtual ~Symbol();
66
+ };
67
+
68
+ }; // namespace
69
+
70
+ #endif // !defined(COCO_SYMBOL_H__)