hpp-lang 0.6.0

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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/ast.d.ts +89 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +2 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/capabilities.d.ts +75 -0
  8. package/dist/capabilities.d.ts.map +1 -0
  9. package/dist/capabilities.js +181 -0
  10. package/dist/capabilities.js.map +1 -0
  11. package/dist/errors.d.ts +21 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +27 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/examples.d.ts +9 -0
  16. package/dist/examples.d.ts.map +1 -0
  17. package/dist/examples.js +780 -0
  18. package/dist/examples.js.map +1 -0
  19. package/dist/extensions/line/index.d.ts +45 -0
  20. package/dist/extensions/line/index.d.ts.map +1 -0
  21. package/dist/extensions/line/index.js +99 -0
  22. package/dist/extensions/line/index.js.map +1 -0
  23. package/dist/extensions/maze/index.d.ts +37 -0
  24. package/dist/extensions/maze/index.d.ts.map +1 -0
  25. package/dist/extensions/maze/index.js +43 -0
  26. package/dist/extensions/maze/index.js.map +1 -0
  27. package/dist/extensions/soccer/index.d.ts +8 -0
  28. package/dist/extensions/soccer/index.d.ts.map +1 -0
  29. package/dist/extensions/soccer/index.js +93 -0
  30. package/dist/extensions/soccer/index.js.map +1 -0
  31. package/dist/hardware.d.ts +44 -0
  32. package/dist/hardware.d.ts.map +1 -0
  33. package/dist/hardware.js +2 -0
  34. package/dist/hardware.js.map +1 -0
  35. package/dist/index.d.ts +59 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +69 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/interpreter.d.ts +88 -0
  40. package/dist/interpreter.d.ts.map +1 -0
  41. package/dist/interpreter.js +795 -0
  42. package/dist/interpreter.js.map +1 -0
  43. package/dist/lexer.d.ts +21 -0
  44. package/dist/lexer.d.ts.map +1 -0
  45. package/dist/lexer.js +175 -0
  46. package/dist/lexer.js.map +1 -0
  47. package/dist/parser.d.ts +60 -0
  48. package/dist/parser.d.ts.map +1 -0
  49. package/dist/parser.js +569 -0
  50. package/dist/parser.js.map +1 -0
  51. package/dist/robotics/actions.d.ts +13 -0
  52. package/dist/robotics/actions.d.ts.map +1 -0
  53. package/dist/robotics/actions.js +38 -0
  54. package/dist/robotics/actions.js.map +1 -0
  55. package/dist/robotics/contracts.d.ts +88 -0
  56. package/dist/robotics/contracts.d.ts.map +1 -0
  57. package/dist/robotics/contracts.js +31 -0
  58. package/dist/robotics/contracts.js.map +1 -0
  59. package/dist/robotics/index.d.ts +21 -0
  60. package/dist/robotics/index.d.ts.map +1 -0
  61. package/dist/robotics/index.js +19 -0
  62. package/dist/robotics/index.js.map +1 -0
  63. package/dist/robotics/motion.d.ts +139 -0
  64. package/dist/robotics/motion.d.ts.map +1 -0
  65. package/dist/robotics/motion.js +248 -0
  66. package/dist/robotics/motion.js.map +1 -0
  67. package/dist/robotics/sensors.d.ts +15 -0
  68. package/dist/robotics/sensors.d.ts.map +1 -0
  69. package/dist/robotics/sensors.js +12 -0
  70. package/dist/robotics/sensors.js.map +1 -0
  71. package/dist/robotics/snapshot.d.ts +12 -0
  72. package/dist/robotics/snapshot.d.ts.map +1 -0
  73. package/dist/robotics/snapshot.js +9 -0
  74. package/dist/robotics/snapshot.js.map +1 -0
  75. package/dist/robotics/types.d.ts +12 -0
  76. package/dist/robotics/types.d.ts.map +1 -0
  77. package/dist/robotics/types.js +9 -0
  78. package/dist/robotics/types.js.map +1 -0
  79. package/dist/runtime.d.ts +81 -0
  80. package/dist/runtime.d.ts.map +1 -0
  81. package/dist/runtime.js +150 -0
  82. package/dist/runtime.js.map +1 -0
  83. package/dist/tokens.d.ts +33 -0
  84. package/dist/tokens.d.ts.map +1 -0
  85. package/dist/tokens.js +97 -0
  86. package/dist/tokens.js.map +1 -0
  87. package/dist/version.d.ts +14 -0
  88. package/dist/version.d.ts.map +1 -0
  89. package/dist/version.js +6 -0
  90. package/dist/version.js.map +1 -0
  91. package/package.json +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../src/examples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { ExtensionDescriptor } from '../../capabilities.js';
2
+ import { Hardware, SensorValue } from '../../hardware.js';
3
+ /**
4
+ * Extensão Line (§11, mínima): contratos para seguidores de linha.
5
+ * Seguidor de linha é H++ com outro vocabulário — mesma gramática,
6
+ * mesmo interpretador, sem nenhum outro domínio em nenhum import daqui.
7
+ */
8
+ export declare const LINE_EXT_VERSION = "0.2.0";
9
+ export declare const LINE_EXTENSION: ExtensionDescriptor;
10
+ /** Leitura de N sensores de refletância (0 = branco, 1 = preto). */
11
+ export interface LineArrayReading {
12
+ values: number[];
13
+ }
14
+ /** Sensor de linha genérico: funciona no simulador, ESP32, RP2040... */
15
+ export interface LineSensor {
16
+ read(): LineArrayReading;
17
+ }
18
+ /** Erro lateral da linha (-1..1): 0 = centrado. Base do PID de linha. */
19
+ export declare function lineError(reading: LineArrayReading): number;
20
+ /** Controlador de linha (P/PD): exemplo de uso no adapter, não no núcleo. */
21
+ export interface LineController {
22
+ update(error: number, deltaTime: number): {
23
+ throttle: number;
24
+ steer: number;
25
+ };
26
+ }
27
+ /**
28
+ * Hardware de mentira para seguidores de linha (testes e sala de aula):
29
+ * implementa só o subconjunto que o domínio Line precisa.
30
+ */
31
+ export declare class MockLineHardware implements Hardware {
32
+ readonly log: string[];
33
+ /** Sensores injetados pelo teste (esq, centro, dir). */
34
+ lineValues: number[];
35
+ sensors(): Record<string, SensorValue>;
36
+ drive(throttle: number): void;
37
+ turn(steer: number): void;
38
+ fire(): void;
39
+ stop(): void;
40
+ aimMain(): void;
41
+ aimSecondary(): void;
42
+ radioSend(msg: number): void;
43
+ dribble(on: boolean): void;
44
+ }
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/line/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC,eAAO,MAAM,cAAc,EAAE,mBAoB5B,CAAC;AAEF,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,gBAAgB,CAAC;CAC1B;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAW3D;AAED,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/E;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,CAAM;IAC5B,wDAAwD;IACxD,UAAU,EAAE,MAAM,EAAE,CAAa;IAEjC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IAatC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,IAAI;IAIf,YAAY,IAAI,IAAI;IAIpB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;CAG3B"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Extensão Line (§11, mínima): contratos para seguidores de linha.
3
+ * Seguidor de linha é H++ com outro vocabulário — mesma gramática,
4
+ * mesmo interpretador, sem nenhum outro domínio em nenhum import daqui.
5
+ */
6
+ export const LINE_EXT_VERSION = '0.2.0';
7
+ export const LINE_EXTENSION = {
8
+ id: 'line',
9
+ version: LINE_EXT_VERSION,
10
+ domain: 'Line Following',
11
+ /** §17: `line_sensor` + `motor` + `encoder`. Sem nenhum outro domínio daqui. */
12
+ capabilities: ['motor', 'encoder', 'line_sensor'],
13
+ sensors: [
14
+ 'linha_esq', 'line_left',
15
+ 'linha_centro', 'line_center',
16
+ 'linha_dir', 'line_right',
17
+ 'erro_linha', 'line_error',
18
+ 'encoder', 'odometria', 'odometry',
19
+ 'ciclo', 'cycle'
20
+ ],
21
+ actions: ['drive', 'turn', 'stop'],
22
+ sensorRequires: {
23
+ encoder: ['encoder'],
24
+ odometria: ['odometry'],
25
+ odometry: ['odometry']
26
+ }
27
+ };
28
+ /** Erro lateral da linha (-1..1): 0 = centrado. Base do PID de linha. */
29
+ export function lineError(reading) {
30
+ const n = reading.values.length;
31
+ if (n === 0)
32
+ return 0;
33
+ let num = 0;
34
+ let den = 0;
35
+ for (let i = 0; i < n; i++) {
36
+ const w = (i / (n - 1)) * 2 - 1; // -1 (esq) .. +1 (dir)
37
+ num += w * reading.values[i];
38
+ den += reading.values[i];
39
+ }
40
+ return den === 0 ? 0 : num / den;
41
+ }
42
+ /**
43
+ * Hardware de mentira para seguidores de linha (testes e sala de aula):
44
+ * implementa só o subconjunto que o domínio Line precisa.
45
+ */
46
+ export class MockLineHardware {
47
+ constructor() {
48
+ Object.defineProperty(this, "log", {
49
+ enumerable: true,
50
+ configurable: true,
51
+ writable: true,
52
+ value: []
53
+ });
54
+ /** Sensores injetados pelo teste (esq, centro, dir). */
55
+ Object.defineProperty(this, "lineValues", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: [0, 0, 0]
60
+ });
61
+ }
62
+ sensors() {
63
+ return {
64
+ linha_esq: this.lineValues[0] ?? 0,
65
+ line_left: this.lineValues[0] ?? 0,
66
+ linha_centro: this.lineValues[1] ?? 0,
67
+ line_center: this.lineValues[1] ?? 0,
68
+ linha_dir: this.lineValues[2] ?? 0,
69
+ line_right: this.lineValues[2] ?? 0,
70
+ erro_linha: lineError({ values: this.lineValues }),
71
+ line_error: lineError({ values: this.lineValues })
72
+ };
73
+ }
74
+ drive(throttle) {
75
+ this.log.push(`drive:${throttle}`);
76
+ }
77
+ turn(steer) {
78
+ this.log.push(`turn:${steer}`);
79
+ }
80
+ fire() {
81
+ this.log.push('fire');
82
+ }
83
+ stop() {
84
+ this.log.push('stop');
85
+ }
86
+ aimMain() {
87
+ this.log.push('aimMain');
88
+ }
89
+ aimSecondary() {
90
+ this.log.push('aimSecondary');
91
+ }
92
+ radioSend(msg) {
93
+ this.log.push(`radio:${msg}`);
94
+ }
95
+ dribble(on) {
96
+ this.log.push(`dribble:${on}`);
97
+ }
98
+ }
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/line/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { ExtensionDescriptor } from '../../capabilities.js';
2
+ /**
3
+ * Extensão Maze (§12, SÓ CONTRATOS): nenhuma lógica aqui de propósito
4
+ * (§9: não implementar futuro desnecessariamente). Quando existir um
5
+ * simulador/hardware de labirinto, ele implementa estas interfaces e
6
+ * declara `MAZE_EXTENSION` — o núcleo H++ não muda.
7
+ *
8
+ * NOTA DE DOUTRINA: `celula_x/cell_z` (posição discreta) abrem exceção
9
+ * deliberada à percepção relativa — mapear labirinto exige saber onde se
10
+ * está na grade. É a única exceção prevista; todo o resto é relativo.
11
+ */
12
+ export declare const MAZE_EXT_VERSION = "0.2.0";
13
+ export declare const MAZE_EXTENSION: ExtensionDescriptor;
14
+ /** Distância em metros numa direção. */
15
+ export interface DistanceSensor {
16
+ read(): number;
17
+ }
18
+ /** Detector de parede (porta lógica sobre distância + limiar). */
19
+ export interface WallDetector {
20
+ wallAhead(): boolean;
21
+ wallLeft(): boolean;
22
+ wallRight(): boolean;
23
+ }
24
+ /** Posição discreta no labirinto (para mapa/grafo futuro). */
25
+ export interface GridCell {
26
+ x: number;
27
+ z: number;
28
+ }
29
+ /** Mapa mínimo: diz se a célula é livre. */
30
+ export interface MazeMap {
31
+ isFree(cell: GridCell): boolean;
32
+ }
33
+ /** Navegador futuro (exploração/caminho virão depois, §9). */
34
+ export interface Navigator {
35
+ nextWaypoint(from: GridCell): GridCell | null;
36
+ }
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/maze/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;;;;;GASG;AAEH,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC,eAAO,MAAM,cAAc,EAAE,mBA8B5B,CAAC;AAEF,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,SAAS,IAAI,OAAO,CAAC;IACrB,QAAQ,IAAI,OAAO,CAAC;IACpB,SAAS,IAAI,OAAO,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,4CAA4C;AAC5C,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;CACjC;AAED,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CAC/C"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Extensão Maze (§12, SÓ CONTRATOS): nenhuma lógica aqui de propósito
3
+ * (§9: não implementar futuro desnecessariamente). Quando existir um
4
+ * simulador/hardware de labirinto, ele implementa estas interfaces e
5
+ * declara `MAZE_EXTENSION` — o núcleo H++ não muda.
6
+ *
7
+ * NOTA DE DOUTRINA: `celula_x/cell_z` (posição discreta) abrem exceção
8
+ * deliberada à percepção relativa — mapear labirinto exige saber onde se
9
+ * está na grade. É a única exceção prevista; todo o resto é relativo.
10
+ */
11
+ export const MAZE_EXT_VERSION = '0.2.0';
12
+ export const MAZE_EXTENSION = {
13
+ id: 'maze',
14
+ version: MAZE_EXT_VERSION,
15
+ domain: 'Maze / Labyrinth',
16
+ /** §18/§33: distância, parede, bússola e encoder — sem depender de nenhum outro domínio. */
17
+ capabilities: ['motor', 'encoder', 'distance_sensor', 'wall_detector', 'compass'],
18
+ sensors: [
19
+ 'dist_frente', 'dist_ahead',
20
+ 'dist_esq', 'dist_left',
21
+ 'dist_dir', 'dist_right',
22
+ 'parede_frente', 'wall_ahead',
23
+ 'parede_esquerda', 'wall_left',
24
+ 'parede_direita', 'wall_right',
25
+ 'bussola', 'compass',
26
+ 'encoder', 'odometria', 'odometry',
27
+ 'celula_x', 'cell_x',
28
+ 'celula_z', 'cell_z'
29
+ ],
30
+ actions: ['drive', 'turn', 'stop'],
31
+ sensorRequires: {
32
+ parede_frente: ['wall_detector'],
33
+ wall_ahead: ['wall_detector'],
34
+ parede_esquerda: ['wall_detector'],
35
+ wall_left: ['wall_detector'],
36
+ parede_direita: ['wall_detector'],
37
+ wall_right: ['wall_detector'],
38
+ encoder: ['encoder'],
39
+ odometria: ['odometry'],
40
+ odometry: ['odometry']
41
+ }
42
+ };
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/maze/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,EAAE,EAAE,MAAM;IACV,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAE,kBAAkB;IAC1B,4FAA4F;IAC5F,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,CAAC;IACjF,OAAO,EAAE;QACP,aAAa,EAAE,YAAY;QAC3B,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,YAAY;QACxB,eAAe,EAAE,YAAY;QAC7B,iBAAiB,EAAE,WAAW;QAC9B,gBAAgB,EAAE,YAAY;QAC9B,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,WAAW,EAAE,UAAU;QAClC,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,QAAQ;KACrB;IACD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;IAClC,cAAc,EAAE;QACd,aAAa,EAAE,CAAC,eAAe,CAAC;QAChC,UAAU,EAAE,CAAC,eAAe,CAAC;QAC7B,eAAe,EAAE,CAAC,eAAe,CAAC;QAClC,SAAS,EAAE,CAAC,eAAe,CAAC;QAC5B,cAAc,EAAE,CAAC,eAAe,CAAC;QACjC,UAAU,EAAE,CAAC,eAAe,CAAC;QAC7B,OAAO,EAAE,CAAC,SAAS,CAAC;QACpB,SAAS,EAAE,CAAC,UAAU,CAAC;QACvB,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { ExtensionDescriptor } from '../../capabilities.js';
2
+ /**
3
+ * Extensão Soccer (primeiro domínio, §10): descreve o vocabulário soccer
4
+ * sem tocar no parser — sensores chegam por snapshot, ações pelo `Hardware`.
5
+ */
6
+ export declare const SOCCER_EXT_VERSION = "0.4.0";
7
+ export declare const SOCCER_EXTENSION: ExtensionDescriptor;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/soccer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,gBAAgB,EAAE,mBAsF9B,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Extensão Soccer (primeiro domínio, §10): descreve o vocabulário soccer
3
+ * sem tocar no parser — sensores chegam por snapshot, ações pelo `Hardware`.
4
+ */
5
+ export const SOCCER_EXT_VERSION = '0.4.0';
6
+ export const SOCCER_EXTENSION = {
7
+ id: 'soccer',
8
+ version: SOCCER_EXT_VERSION,
9
+ domain: 'Soccer Infrared',
10
+ /**
11
+ * Soccer declara o drivetrain diferencial do simulador (`MOTORES`) e
12
+ * odometria por encoder (§15/§18). NÃO declara `motor_individual`/
13
+ * `motor_left`/`motor_right`: o modelo simulado não tem rodas independentes
14
+ * reais — `MOTOR_ESQUERDO` é barrado de propósito (§10/§32).
15
+ */
16
+ capabilities: [
17
+ 'motor', 'differential_drive', 'encoder',
18
+ 'compass', 'distance_sensor', 'ball_sensor',
19
+ 'radio', 'kicker', 'dribbler', 'line_sensor'
20
+ ],
21
+ sensors: [
22
+ 'ver_bola', 'see_ball',
23
+ 'direcao_bola', 'ball_dir',
24
+ 'direcao_gol', 'goal_dir',
25
+ 'dist_bola', 'ball_dist',
26
+ 'forca_sinal', 'signal',
27
+ 'setor_bola', 'ball_sector',
28
+ 'bussola', 'compass',
29
+ 'deriva_bussola', 'compass_drift',
30
+ 'dist_frente', 'dist_ahead',
31
+ 'tof_esq', 'tof_left',
32
+ 'tof_dir', 'tof_right',
33
+ 'linha_frente', 'line_front',
34
+ 'linha_tras', 'line_back',
35
+ 'linha_esq', 'line_left',
36
+ 'linha_dir', 'line_right',
37
+ 'encoder', 'odometria', 'odometry',
38
+ 'velocidade', 'speed',
39
+ 'velocidade_angular', 'angular_speed',
40
+ 'tempo', 'time',
41
+ 'tempo_total', 'total_time',
42
+ 'placar_eu', 'my_score',
43
+ 'placar_outro', 'foe_score',
44
+ 'fase', 'phase',
45
+ 'radio'
46
+ ],
47
+ actions: ['drive', 'turn', 'kick', 'stop', 'aimBall', 'aimGoal', 'radioSend', 'dribble'],
48
+ /** Verificação por ação (§9): o resto (locomoção/mira de gol) não exige nada além do robô. */
49
+ requires: {
50
+ kick: ['kicker'],
51
+ dribble: ['dribbler'],
52
+ radioSend: ['radio'],
53
+ aimBall: ['ball_sensor']
54
+ },
55
+ /**
56
+ * Verificação por sensor: `direcao_gol` é geometria (sem exigência);
57
+ * resto do jogo (tempo/placar/fase/radio) não exige capacidade.
58
+ */
59
+ sensorRequires: {
60
+ ver_bola: ['ball_sensor'],
61
+ see_ball: ['ball_sensor'],
62
+ direcao_bola: ['ball_sensor'],
63
+ ball_dir: ['ball_sensor'],
64
+ dist_bola: ['ball_sensor'],
65
+ ball_dist: ['ball_sensor'],
66
+ forca_sinal: ['ball_sensor'],
67
+ signal: ['ball_sensor'],
68
+ setor_bola: ['ball_sensor'],
69
+ ball_sector: ['ball_sensor'],
70
+ bussola: ['compass'],
71
+ compass: ['compass'],
72
+ deriva_bussola: ['compass'],
73
+ compass_drift: ['compass'],
74
+ dist_frente: ['distance_sensor'],
75
+ dist_ahead: ['distance_sensor'],
76
+ tof_esq: ['distance_sensor'],
77
+ tof_left: ['distance_sensor'],
78
+ tof_dir: ['distance_sensor'],
79
+ tof_right: ['distance_sensor'],
80
+ linha_frente: ['line_sensor'],
81
+ line_front: ['line_sensor'],
82
+ linha_tras: ['line_sensor'],
83
+ line_back: ['line_sensor'],
84
+ linha_esq: ['line_sensor'],
85
+ line_left: ['line_sensor'],
86
+ linha_dir: ['line_sensor'],
87
+ line_right: ['line_sensor'],
88
+ encoder: ['encoder'],
89
+ odometria: ['odometry'],
90
+ odometry: ['odometry']
91
+ }
92
+ };
93
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/soccer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Contrato de hardware do H++: o núcleo da linguagem só enxerga SENSORES
3
+ * (leitura, foto tirada a cada ciclo) e AÇÕES (atuadores). Qualquer projeto —
4
+ * futebol, seguidor de linha, robô físico — implementa esta interface
5
+ * (ver `adapters/` no futuro; hoje o simulador injeta o adapter soccer).
6
+ */
7
+ export type SensorValue = number | boolean | string;
8
+ export interface Hardware {
9
+ /** Foto nova dos sensores a cada ciclo (tick). */
10
+ sensors(): Record<string, SensorValue>;
11
+ /**
12
+ * Relógio: o núcleo fornece `ciclo` (determinístico); tempo de parede/jogo
13
+ * (`tempo`) é responsabilidade do domínio via snapshot, se fizer sentido.
14
+ */
15
+ /** Avanço (-1..1). Valores fora da faixa são aparados. */
16
+ drive(throttle: number): void;
17
+ /** Giro (-1..1). Valores fora da faixa são aparados. */
18
+ turn(steer: number): void;
19
+ /** Dispara o atuador principal (chute/garra/luz — depende do hardware). */
20
+ fire(): void;
21
+ /** Para tudo. */
22
+ stop(): void;
23
+ /** Mira sozinho o alvo principal (bola/linha) com controle P. */
24
+ aimMain(): void;
25
+ /** Mira sozinho o alvo secundário (gol/base). */
26
+ aimSecondary(): void;
27
+ /** Envia um número no rádio da equipe. */
28
+ radioSend(msg: number): void;
29
+ /** Liga/desliga o rolete de drible (gruda a bola na frente). */
30
+ dribble(on: boolean): void;
31
+ /** `MOTOR id, velocidade` — capability `motor_individual`. */
32
+ motor?(id: number, value: number): void;
33
+ /** `MOTOR_ESQUERDO v` — capability `motor_left`. */
34
+ motorLeft?(value: number): void;
35
+ /** `MOTOR_DIREITO v` — capability `motor_right`. */
36
+ motorRight?(value: number): void;
37
+ /** `MOTORES esquerda, direita` — capability `differential_drive`. */
38
+ motors?(left: number, right: number): void;
39
+ /** `MOVER_LATERAL v` — capability `holonomic_drive`. */
40
+ moveLateral?(value: number): void;
41
+ /** `MOVER_XY vx, vy` — capability `holonomic_drive`. */
42
+ moveXY?(vx: number, vy: number): void;
43
+ }
44
+ //# sourceMappingURL=hardware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../src/hardware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,kDAAkD;IAClD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC;;;OAGG;IACH,0DAA0D;IAC1D,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wDAAwD;IACxD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2EAA2E;IAC3E,IAAI,IAAI,IAAI,CAAC;IACb,iBAAiB;IACjB,IAAI,IAAI,IAAI,CAAC;IACb,iEAAiE;IACjE,OAAO,IAAI,IAAI,CAAC;IAChB,iDAAiD;IACjD,YAAY,IAAI,IAAI,CAAC;IACrB,0CAA0C;IAC1C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gEAAgE;IAChE,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAO3B,8DAA8D;IAC9D,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,oDAAoD;IACpD,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oDAAoD;IACpD,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qEAAqE;IACrE,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,wDAAwD;IACxD,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,wDAAwD;IACxD,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hardware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware.js","sourceRoot":"","sources":["../src/hardware.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { type LexOptions } from './lexer.js';
2
+ import { RunOptions, RunResult } from './interpreter.js';
3
+ import type { HppError } from './errors.js';
4
+ import { Hardware } from './hardware.js';
5
+ import { Stmt } from './ast.js';
6
+ export { lex as Lexer, lex } from './lexer.js';
7
+ export { Parser } from './parser.js';
8
+ export { Interpreter } from './interpreter.js';
9
+ export type { Expr, Stmt } from './ast.js';
10
+ export type { Token, TokenType } from './tokens.js';
11
+ export type { HppError } from './errors.js';
12
+ export { RuntimeError } from './errors.js';
13
+ export type { HppError as InterpreterHppError } from './interpreter.js';
14
+ export type { Hardware, SensorValue } from './hardware.js';
15
+ export { HppRuntime } from './runtime.js';
16
+ export { HPP_CORE_VERSION } from './version.js';
17
+ export type { VersionInfo } from './version.js';
18
+ export type { Capability, ExtensionDescriptor } from './capabilities.js';
19
+ export { checkRequirements, missingCapabilitiesMessage, checkProgramActions, collectProgramActions, collectProgramSensors } from './capabilities.js';
20
+ export type { ActionSpec, ActionName } from './tokens.js';
21
+ export { stripAccents, type LexOptions } from './lexer.js';
22
+ export type { LexError } from './lexer.js';
23
+ export type { ParseError } from './parser.js';
24
+ export type { SensorSnapshot } from './robotics/sensors.js';
25
+ export { normalizeSnapshotKeys } from './robotics/snapshot.js';
26
+ export { CANONICAL_ACTIONS, type CanonicalAction } from './robotics/actions.js';
27
+ export type { Value, HppFunction, Builtin } from './robotics/types.js';
28
+ /** Robotics Motion Primitives (§5–§14): contrato, ações e relógio do movimento. */
29
+ export { HPP_ROBOTICS_VERSION, MOTION_ACTIONS, MOTION_STATE_SENSORS, isMotionAction, missingMotionCapability, motionCapabilityError } from './robotics/index.js';
30
+ export type { MotionAction, MotionCommand, MotionCapabilities, MotorCapabilities, EncoderCapabilities, LocomotionCapabilities, RoboticsProfile } from './robotics/index.js';
31
+ export type { RunOptions, RunResult } from './interpreter.js';
32
+ export { SOCCER_EXTENSION, SOCCER_EXT_VERSION } from './extensions/soccer/index.js';
33
+ export { LINE_EXTENSION, LINE_EXT_VERSION, lineError, MockLineHardware } from './extensions/line/index.js';
34
+ export type { LineArrayReading, LineSensor, LineController } from './extensions/line/index.js';
35
+ export { MAZE_EXTENSION, MAZE_EXT_VERSION } from './extensions/maze/index.js';
36
+ export type { DistanceSensor, WallDetector, GridCell, MazeMap, Navigator } from './extensions/maze/index.js';
37
+ /** Programa compilado: rode `run(hardware)` uma vez por ciclo. */
38
+ export declare class Program {
39
+ readonly statements: Stmt[];
40
+ private interp;
41
+ constructor(statements: Stmt[]);
42
+ /**
43
+ * Executa 1 ciclo. Variáveis do aluno sobrevivem entre chamadas.
44
+ * `opts` (§7/§28): capabilities para checagem em runtime + `dt` do relógio
45
+ * determinístico; sem `opts`, o núcleo roda "puro" (sem gate de capability).
46
+ */
47
+ run(hw: Hardware, fuel?: number, opts?: RunOptions): RunResult;
48
+ /** Apaga a memória do aluno (recomeçar do zero). */
49
+ reset(): void;
50
+ }
51
+ export interface CompileResult {
52
+ program: Program | null;
53
+ errors: HppError[];
54
+ }
55
+ /** Compila fonte H++ (PT/EN). Erros vêm com linha e dica em português. */
56
+ export declare function compile(source: string, opts?: {
57
+ extraActions?: LexOptions['extraActions'];
58
+ }): CompileResult;
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,69 @@
1
+ import { lex } from './lexer.js';
2
+ import { Parser } from './parser.js';
3
+ import { Interpreter } from './interpreter.js';
4
+ // Pipeline da linguagem (núcleo puro): Lexer → Parser → AST → Interpreter.
5
+ export { lex as Lexer, lex } from './lexer.js';
6
+ export { Parser } from './parser.js';
7
+ export { Interpreter } from './interpreter.js';
8
+ export { RuntimeError } from './errors.js';
9
+ export { HppRuntime } from './runtime.js';
10
+ export { HPP_CORE_VERSION } from './version.js';
11
+ export { checkRequirements, missingCapabilitiesMessage, checkProgramActions, collectProgramActions, collectProgramSensors } from './capabilities.js';
12
+ export { stripAccents } from './lexer.js';
13
+ export { normalizeSnapshotKeys } from './robotics/snapshot.js';
14
+ export { CANONICAL_ACTIONS } from './robotics/actions.js';
15
+ /** Robotics Motion Primitives (§5–§14): contrato, ações e relógio do movimento. */
16
+ export { HPP_ROBOTICS_VERSION, MOTION_ACTIONS, MOTION_STATE_SENSORS, isMotionAction, missingMotionCapability, motionCapabilityError } from './robotics/index.js';
17
+ // Extensões de domínio (soccer / line / maze).
18
+ export { SOCCER_EXTENSION, SOCCER_EXT_VERSION } from './extensions/soccer/index.js';
19
+ export { LINE_EXTENSION, LINE_EXT_VERSION, lineError, MockLineHardware } from './extensions/line/index.js';
20
+ export { MAZE_EXTENSION, MAZE_EXT_VERSION } from './extensions/maze/index.js';
21
+ /** Programa compilado: rode `run(hardware)` uma vez por ciclo. */
22
+ export class Program {
23
+ constructor(statements) {
24
+ Object.defineProperty(this, "statements", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: statements
29
+ });
30
+ Object.defineProperty(this, "interp", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: new Interpreter()
35
+ });
36
+ }
37
+ /**
38
+ * Executa 1 ciclo. Variáveis do aluno sobrevivem entre chamadas.
39
+ * `opts` (§7/§28): capabilities para checagem em runtime + `dt` do relógio
40
+ * determinístico; sem `opts`, o núcleo roda "puro" (sem gate de capability).
41
+ */
42
+ run(hw, fuel = 5000, opts) {
43
+ return this.interp.run(this.statements, hw, fuel, opts);
44
+ }
45
+ /** Apaga a memória do aluno (recomeçar do zero). */
46
+ reset() {
47
+ this.interp.reset();
48
+ }
49
+ }
50
+ /** Compila fonte H++ (PT/EN). Erros vêm com linha e dica em português. */
51
+ export function compile(source, opts) {
52
+ const { tokens, errors: lexErrors } = lex(source, opts ?? {});
53
+ const errors = lexErrors.map((e) => ({ line: e.line, col: e.col, message: e.message }));
54
+ if (errors.length > 0)
55
+ return { program: null, errors };
56
+ const parser = new Parser(tokens);
57
+ const statements = parser.parse();
58
+ for (const e of parser.errors) {
59
+ errors.push({ line: e.line, col: e.col, message: e.message });
60
+ }
61
+ if (errors.length > 0 || statements.length === 0) {
62
+ if (statements.length === 0 && errors.length === 0) {
63
+ return { program: new Program([]), errors: [] };
64
+ }
65
+ return { program: null, errors };
66
+ }
67
+ return { program: new Program(statements), errors: [] };
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}