У меня есть сложная грамматика (в antlr 2.7), которую мне нужно расширить.Никогда прежде не использовав antlr, я хотел сначала написать очень простой Lexer и Parser.
Я нашел очень хорошее объяснение для antlr3 и попытался его адаптировать:
header{
#include <iostream>
using namespace std;
}
options {
language="Cpp";
}
class P2 extends Parser;
/* This will be the entry point of our parser. */
eval
: additionExp
;
/* Addition and subtraction have the lowest precedence. */
additionExp
: multiplyExp
( "+" multiplyExp
| "-" multiplyExp
)*
;
/* Multiplication and addition have a higher precedence. */
multiplyExp
: atomExp
( "*" atomExp
| "/" atomExp
)*
;
/* An expression atom is the smallest part of an expression: a number. Or
when we encounter parenthesis, we're making a recursive call back to the
rule 'additionExp'. As you can see, an 'atomExp' has the highest precedence. */
atomExp
: Number
| "(" additionExp ")"
;
/* A number: can be an integer value, or a decimal value */
number
: ("0".."9")+ ("." ("0".."9")+)?
;
/* We're going to ignore all white space characters */
protected
ws
: (" " | "\t" | "\r" | "\n") { newline(); }
;
Он генерируетчетыре файла без ошибок: P2.cpp, P2.hpp, P2TokenTypes.hpp и P2TokenTypes.txt.Но что теперь?Как мне создать рабочую программу с этим?Я пытался добавить эти файлы в VS2005-WinConsole-Project, но он не компилируется:
p2.cpp (277): фатальная ошибка C1010: неожиданный конец файла при поиске предварительно скомпилированного заголовка.Вы забыли добавить '#include "stdafx.h" к своему источнику?