2010-07-03 19 views
0

Im écrire un analyseur que peut analyser des expressions comme myfunc1(), myfunc2(param1) et myfunc3(param1, param2) (avec une quantité inconnue de paramètres). Maintenant, j'essaie d'obtenir mes expressions syntaxiques correctes. J'utilise le . Voici ce que j'ai trouvé avec:expression Parser pour les appels de fonction séparés par des virgules paramètres

application(res) ::= APPLICATIONNAME(a) BRACE_OPEN params BRACE_CLOSE. {res = a;} 
application(res) ::= APPLICATIONNAME(a) BRACE_OPEN BRACE_CLOSE. {res = a;} 
params ::= PARAM(p). {res = p;} 
params ::= SEPARATOR. 

Ne vous souciez pas du contenu des accolades pour le moment. La définition params permet des paramètres vides (plusieurs séparateurs les uns après les autres), ce qui est correct pour le moment. Mais comment devrais-je changer la définition pour forcer des paramètres non vides mais avoir tous les paramètres séparés par le jeton SEPARATOR?

Répondre

1

suivant l'exemple de http://www.hwaci.com/sw/lemon/lemon.html qui se lit

list ::= list element.  // left-recursion. Good! 
list ::= . 

list est vide (la deuxième règle) ou contient au moins un element, avec les différents element s séparés par des espaces, je dirais que vous voulez

params ::= params SEPARATOR PARAM(p). 
params ::= PARAM(p). 
+0

Si je souhaite autoriser les paramètres vides, est-ce que j'ajouterais la ligne params :: = SEPARATOR? – chiborg