sintaxis programas funciones ejemplos completo comandos codigos avanzados c++ yacc bnf
here

programas - ¿Dónde puedo encontrar la gramática estándar de BNF o YACC para el lenguaje C++?



sintaxis de c++ (6)

Desde el C ++ FAQ Lite :

38.11 ¿Hay una gramática C ++ capaz de yacc?

La gramática yacc principal que querrás es de Ed Willink. Ed cree que su gramática es totalmente compatible con el estándar ISO / ANSI C ++ , sin embargo, no lo garantiza: "la gramática no", dice, "se usó en la ira". Puede obtener la gramática sin rutinas de acción o la gramática con rutinas de acción ficticias . También puede obtener el lexer correspondiente . Para aquellos que estén interesados ​​en cómo logra un analizador sin contexto (al presionar todas las ambigüedades más un pequeño número de reparaciones que se realizarán después de completar el análisis), puede leer el capítulo 4 de su tesis .

También hay una gramática muy antigua de yacc que no admite plantillas, excepciones ni espacios de nombres; además, se desvía del lenguaje central de algunas maneras sutiles. Puedes conseguir esa gramática here o here .

Estoy tratando de trabajar en un tipo de generador de código para ayudar a realizar pruebas unitarias de un proyecto mixto de C / C ++ heredado. No encuentro que ningún tipo de herramienta independiente pueda generar código de código auxiliar a partir de la declaración. Así que decido construir uno, no debería ser tan difícil.

Por favor, cualquiera puede apuntarme a un enlace de gramática estándar, mejor descrito por el lenguaje yacc.

Espero no reinventar la rueda, por favor ayúdame en ese caso.

Saludos cordiales, Kevin


El enlace de Jared es lo más cercano a una gramática libre de contexto que puedes obtener. Ciertas cosas deben retrasarse para más adelante, pero eso es, por algunos argumentos, mejor que la gramática sensible al contexto de C ++.

Para empeorar las cosas, C ++ 1x complejizará significativamente la gramática. Para llegar a un análisis perfecto de C ++, un analizador necesitará implementar suficiente estándar para realizar correctamente la resolución de sobrecargas, incluida la deducción de argumentos de la plantilla, que a su vez requerirá el mecanismo de conceptos, lambdas y, en efecto, casi todos lenguaje, excepto para la búsqueda de nombres en dos etapas y las especificaciones de excepción que, si recuerdo correctamente, no necesitan implementación real para analizar un programa con éxito.

En efecto, estás a mitad de camino de un compilador si puedes analizar C ++.


Encontré este recientemente. No lo he probado, así que no estoy seguro de si funciona. ¿Podría dar más información sobre la herramienta que está tratando de desarrollar? Descargué esta gramática porque estoy trabajando en una herramienta de instrumentación para poder agregar información de cobertura para el marco de prueba de mi unidad .

Después de releer tu comentario ...

Creo que esta herramienta se ajusta exactamente a sus necesidades.


Nuestro kit de herramientas de reingeniería de software DMS se puede obtener con un analizador de C ++ completo y completo. Consulte http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html Esto crea AST y tablas de símbolos, y puede inferir el tipo de cualquier expresión. El DMS permite realizar análisis y transformaciones arbitrarias en el código C ++.

Una transformación "simple" es instrumentar el código para recopilar datos de cobertura de prueba; Ofrecemos esto como una herramienta de COTS. Consulte este documento para comprender cómo lo hace DMS: http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf

EDITAR Septiembre de 2013 (Esta respuesta se estaba volviendo un poco obsoleta): el analizador de C ++ de DMS / resolución de nombres / análisis de flujo de control maneja C ++ 11 completo, en las variantes ISO, GNU y Microsoft. También analizará (y conservará) el código fuente que contiene la mayoría de los condicionales del preprocesador. Tiene una gramática explícita que controla el proceso de análisis, a diferencia de GCC o Clang.


Para otro enfoque, podría considerar la posibilidad de incluir un compilador existente.

GCC-XML "compilará" C ++ en archivos XML con mucha información útil; Puede ser suficiente para sus propósitos.

Desafortunadamente, GCC-XML solo se mantiene a una cuarta parte, y hacer que funcione puede ser ... interesante. Buena suerte, si vas por este camino.


Recientemente he encontrado algunos archivos de gramática para C ++ (C ++ 1998: ISO / IEC 14882: 1998 y C ++ 2008: ISO / IEC SC22 / WG21 N2723 = 08-0233 ) en el sitio web de grammarware . Las gramáticas están representadas en Enahnced BNF, DMS BNF, BGF, SDF y notación Rascal . Sin embargo, es una pena que las gramáticas de C ++ no se actualicen (no C ++ 2003 o C ++ 11).