SPAN sembra essere un gruppo di tipi di record, ogni record con molti dettagli.
Dovrebbe essere semplice da definire una grammatica classico che copre tutti i record (come nonterminali), in termini di qualsiasi sottorecord (come nonterminals) ei tipi di dati terminali rappresentano i vari tipi di dati definiti da SPAN. Potrebbero esserci molti non terminali, ma ciò rende solo una grammatica grande, ma non uno complicato.
La maggior parte dei linguaggi di programmazione ha un piccolo set di token terminali che generalmente possono apparire ovunque. La verità è che le grammatiche definiscono le aspettative su ciò che può apparire dopo (chiamate "first" e "follow" nella letteratura del parser LR), incluso un insieme molto limitato di terminali. Una grammatica SPAN non sarebbe diversa; ogni "stato di analisi" di un parser implica un insieme limitato di terminali che vengono dopo, e uno organizza un parser per trarne vantaggio. (Ho creato parser L (AL) R e uno potrebbe facilmente utilizzare lo stato "corrente" per determinare il sottoinsieme di terminali che potrebbe accadere successivamente). Quindi, un parser di SPAN potrebbe determinare solo il piccolo insieme di token che potrebbero verificarsi in seguito in ogni stato, e usarlo per scegliere i characaters che comprendono quei token successivi (devono formare set disgiunti!).
Un modo semplice per implementare questo è con un recursive descent parser.
Così ho sostengono che tutto ciò che macchinari analisi sarebbe bene per l'analisi SPAN, con un po 'di lavoro personalizzato, eventualmente, a raccogliere i gettoni.
Le azioni di analisi per parser convenzionali creano alberi, ma è altrettanto semplice compilare i campi di una struttura di dati.
fonte
2010-08-19 02:18:36