Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
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


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
The Social Reckoning: il seguito di The ...
iPhone 16 si trova ora su Amazon a soli ...
Amazon fa a pezzi i prezzi dei monitor g...
Componenti hardware e periferiche PC a p...
Pianeta in crisi: 7 su 9 limiti vitali g...
Galaxy S25 FE con taglio di prezzo di 10...
4 robot aspirapolvere e 3 scope elettric...
Nuovissimi Xiaomi 15T e 15T Pro con tagl...
Le agenzie federali americane potranno u...
Smartphone pieghevoli sempre più ...
LG svela le Easy TV, una nuova gamma di ...
L'equipaggio della missione Shenzhou-20 ...
Possibili detriti spaziali del razzo cin...
Amazon distrugge i prezzi: TV OLED LG, i...
Trump studia dazi fino al 100% per sping...
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: 20:05.


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