Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-05-2009, 22:11   #1
Kaesar83
Member
 
Iscritto dal: Jan 2004
Città: Mola di Bari
Messaggi: 64
[C, Flex, Bison] Generare interprete PHP

Ciao raga,
avrei bisogno di una mano.
Mi sto cimentando nella creazione di un interprete PHP per il progetto di un esame.
Ho scaricato Flex e Bison, 2 tool che mi saranno utili per la creazione dell'applicazione.
Innanzitutto ho bisogno della grammatica context-free del linguaggio in esame (il PHP) che ho preso scaricando il pacchetto ufficiale dal www.php.net/downloads.php.
Il file di mio interesse si trova nella cartella Zend e si chiama zend_language_parser.y (questo dovrebbe definire la grammatica context-free, correggetemi se sbaglio).
Dando in pasto a Bison questo file me ne vengono restituiti 2:
zend_language_parser.tab.c
zend_language_parser.tab.h
Una volta fatto ciò ho preso il file zend_language_scanner.l presente sempre nella cartella Zend e l'ho dato in pasto a Flex.
Grazie a quest'ultima operazione mi viene creato il file lex.yy.c
A questo punto compilo i file lex.yy.c e zend_language_parser.tab.c (tramite gcc) in modo da ottenere l'interprete finale, cioè un file .exe (sono su Windows).
Ciò però non avviene visto che mi vengono restituiti un bel pò di errori.
Dove sbaglio!?
Grazie in anticipo

Ultima modifica di Kaesar83 : 11-05-2009 alle 22:14.
Kaesar83 è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2009, 22:37   #2
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da Kaesar83 Guarda i messaggi
Ciao raga,
avrei bisogno di una mano.
Mi sto cimentando nella creazione di un interprete PHP per il progetto di un esame.
Ho scaricato Flex e Bison, 2 tool che mi saranno utili per la creazione dell'applicazione.
Innanzitutto ho bisogno della grammatica context-free del linguaggio in esame (il PHP) che ho preso scaricando il pacchetto ufficiale dal www.php.net/downloads.php.
Il file di mio interesse si trova nella cartella Zend e si chiama zend_language_parser.y (questo dovrebbe definire la grammatica context-free, correggetemi se sbaglio).
Dando in pasto a Bison questo file me ne vengono restituiti 2:
zend_language_parser.tab.c
zend_language_parser.tab.h
Una volta fatto ciò ho preso il file zend_language_scanner.l presente sempre nella cartella Zend e l'ho dato in pasto a Flex.
Grazie a quest'ultima operazione mi viene creato il file lex.yy.c
A questo punto compilo i file lex.yy.c e zend_language_parser.tab.c (tramite gcc) in modo da ottenere l'interprete finale, cioè un file .exe (sono su Windows).
Ciò però non avviene visto che mi vengono restituiti un bel pò di errori.
Dove sbaglio!?
Grazie in anticipo
il .h è presente? che errori sono?
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2009, 23:05   #3
Kaesar83
Member
 
Iscritto dal: Jan 2004
Città: Mola di Bari
Messaggi: 64
Presente dove?
Ecco qui uno screenshot di una parte degli errori
[img=http://img13.imageshack.us/img13/3033/reporterror.th.jpg]
Kaesar83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2009, 11:56   #4
Kaesar83
Member
 
Iscritto dal: Jan 2004
Città: Mola di Bari
Messaggi: 64
up
Kaesar83 è offline   Rispondi citando il messaggio o parte di esso
Old 12-05-2009, 15:02   #5
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Kaesar83 Guarda i messaggi
...
A questo punto compilo i file lex.yy.c e zend_language_parser.tab.c (tramite gcc) in modo da ottenere l'interprete finale, cioè un file .exe (sono su Windows).
Ciò però non avviene visto che mi vengono restituiti un bel pò di errori.
Dove sbaglio!?
Grazie in anticipo
Attenzione,

non è sufficiente compilare i file prodotti da Flex e Bison. Devi fornire al compilatore anche i file che implementano le funzioni utilizzate nelle azioni semantiche(il codice, cioè, utilizzato all'interno delle parentesi graffe).
Per esempio, nella produzione seguente:

Codice:
assignment_list_element:
		variable								{ zend_do_add_list_element(&$1 TSRMLS_CC); }
	|	T_LIST '(' { zend_do_new_list_begin(TSRMLS_C); } assignment_list ')'	{ zend_do_new_list_end(TSRMLS_C); }
	|	/* empty */							{ zend_do_add_list_element(NULL TSRMLS_CC); }
;
devi implementare la funzione zend_do_add_list_element, zend_do_new_list_begin e zend_do_new_list_end.

Puoi utilizzare il file zend_language_parser.y che ti fornisce la grammatica di PHP; ma devi sostituire il codice all'interno delle parentesi graffe con il tuo(creando, per esempio, il nodo dell'AST relativo alla regola di produzione in esame).



P.S. nota che, nella prima sezione del file .y, sono presenti degli include che fanno riferimento alle funzioni e alle costanti utilizzate nelle azioni semantiche(implementate in files a parte):

Codice:
...
#include "zend_compile.h"
#include "zend.h"
#include "zend_list.h"
#include "zend_globals.h"
#include "zend_API.h"
#include "zend_constants.h"
...
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2009, 17:47   #6
Kaesar83
Member
 
Iscritto dal: Jan 2004
Città: Mola di Bari
Messaggi: 64
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Puoi utilizzare il file zend_language_parser.y che ti fornisce la grammatica di PHP; ma devi sostituire il codice all'interno delle parentesi graffe con il tuo(creando, per esempio, il nodo dell'AST relativo alla regola di produzione in esame).
Innanzitutto grazie Vincenzo.
Vorrei meglio comprendere questa frase, se potessi farmi un esempio semplice.
Altra cosa, ho notato che un sacco di librerie richiamate dai vari file non vengono trovate all'atto della compilazione, come posso fare a togliermi questa rogna invece di andarmi a trovare ciascuna libreria!?
Kaesar83 è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2009, 18:04   #7
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Scaricati questo pdf:

http://epaperpress.com/lexandyacc/index.html

È un ottimo tutorial su Flex/Bison. L'esempio "Calculator", a pag. 20, implementa un parser per un piccolo linguaggio di programmazione.
Per esempio, è possibile effettuare il parsing di programmini del tipo:

Codice:
x = 0;
while (x < 3) 
{
  print x;
  x = x + 1;
}
Il parser dell'esempio costruisce un AST. Successivamente, attraversando l'AST, è possibile scegliere se interpretare il programma o compilarlo generando il relativo codice macchina(per una ipotetica stack-based machine ).

Per gli errori di inclusione, non saprei: non utilizzo gcc ma visual studio.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2009, 11:53   #8
Kaesar83
Member
 
Iscritto dal: Jan 2004
Città: Mola di Bari
Messaggi: 64
Salve ragazzi,
dopo qualche giorno di lavoro rieccomi qui.
Innanzitutto credo di essere arrivato ad un ottimo punto, son passato su Linux e son riuscito a far compilare il tutto, modificando un bel pò i file .y e .l, eliminando tutte le funzioni "inutili".
Se passo un file php semplice, con un solo echo o un if tra 2 espressioni la cosa va a buon fine.
Se invece provo ad interpretare un if del tipo if($x == 0) echo "ciao";l'interprete mi restituisce un errore perchè non riconosce questo tipo di sintassi.
Vedendo per bene il file .y mi sono accorto che il tutto dovrebbe dipendere da questo
Codice:
expr_without_variable:	
		PHP_LIST '(' assignment_list ')' '=' expr 
	|	assignment_variable_pointer '=' expr 
	|	assignment_variable_pointer PLUS_EQUAL expr 
	|	assignment_variable_pointer	MINUS_EQUAL expr 
	|	assignment_variable_pointer	MUL_EQUAL expr 	
	|	assignment_variable_pointer DIV_EQUAL expr 
	|	assignment_variable_pointer	CONCAT_EQUAL expr 
	|	assignment_variable_pointer MOD_EQUAL expr 
	|	assignment_variable_pointer	AND_EQUAL expr 
	|	assignment_variable_pointer	OR_EQUAL expr 
	|	assignment_variable_pointer	XOR_EQUAL expr 
	|	assignment_variable_pointer  INCREMENT 
	|	INCREMENT assignment_variable_pointer 
	|	assignment_variable_pointer DECREMENT 
	|	DECREMENT assignment_variable_pointer 
	|	expr BOOLEAN_OR expr 
	|	expr BOOLEAN_AND expr 
	|	expr LOGICAL_OR expr 
	|	expr LOGICAL_AND expr 
	|	expr '|' expr 
	|	expr '^' expr 
	|	expr '&' expr
	|	expr '.' expr 
	|	expr '+' expr 
	|	expr '-' expr 
	|	expr '*' expr
	|	expr '/' expr
	|	expr '%' expr
	|	'+' expr 
	|	'-' expr 
	|	'!' expr 
	|	'~' expr 
	|	expr IS_EQUAL expr 
	|	expr IS_NOT_EQUAL expr 
	|	expr '<' expr
	|	expr IS_SMALLER_OR_EQUAL expr 
	|	expr '>' expr 
	|	expr IS_GREATER_OR_EQUAL expr 
	|	'(' expr ')' 
	|	'(' expr error 
	|	expr '?'
			expr ':' 
			expr 
	|	var 
			'(' function_call_parameter_list ')' 
			possible_function_call 
	|	internal_functions_in_yacc
	|	'$' unambiguous_class_name PHP_CLASS_OPERATOR var 
			'(' function_call_parameter_list ')' 
			possible_function_call 
	|	NEW STRING 
	|	INT_CAST expr 
	|	DOUBLE_CAST expr 
	|	STRING_CAST expr 
	|	EXIT 
	|	EXIT '(' ')'  
	|	EXIT '(' expr ')' 
	|	'@' expr
	|   scalar
	|	PHP_ARRAY '(' array_pair_list ')' 
	|	'`' encaps_list '`' 
	|	PHP_LINE 
	|	PHP_FILE 
;

expr:
		assignment_variable_pointer 
	|	expr_without_variable 
;
Io dovrei creare quindi una sorta di expr_with_variabile, idee su come posso fare?
Grazie in anticipo.
Kaesar83 è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2009, 00:37   #9
Kaesar83
Member
 
Iscritto dal: Jan 2004
Città: Mola di Bari
Messaggi: 64
Da una serie di test son riuscito a capire che non riesce a leggermi le variabili in PHP, cioè qualsiasi stringa con il dollaro davanti.
Qualcuno riesce a darmi una mano?
Kaesar83 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2009, 13:53   #10
Kaesar83
Member
 
Iscritto dal: Jan 2004
Città: Mola di Bari
Messaggi: 64
up
Kaesar83 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
iPhone 18 Pro disponibile su Amazon a 1....
ECOVACS T90 OMNI a 439€ e T90 MAX OMNI a...
Questa Proscenic è la scopa elett...
Microsoft Defender: falso allarme sull'a...
Aerei in volo e truppe pronte all'assalt...
Usano Claude per hackerare OpenAI: ricer...
RatHat: il nuovo malware Android usa il ...
Domanda di petrolio in calo di 2,5 milio...
Il meglio delle offerte weekend Amazon a...
Dopo oltre 100 anni di tentativi, l'IA d...
Speciale robot aspirapolvere in offerta ...
L'IA sta cancellando i lavori junior? Il...
Debutta Chery Italia: non più sol...
Addio ai dischi? Xbox ci aveva già...
Speciale TV Amazon: 4 modelli, da 139€ f...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v