Я хочу создать анализатор в C ++ для моего языка программирования. Его логика немного отличается от обычной, потому что я хочу сначала организовать токены в блоках (таких как выражения или идентификаторы, которые представлены двумя токенами на моем языке), поэтому более позднее выполнение будет проще. Например, если у меня есть линия
Код: Выделить всё
[F]set [V]v2, ([V]v1 = 12)< /code>
Я хочу, чтобы мой анализатор сломал его в чем -то подобном: < /p>
line {
id {
'[F]' : TTYPE_IDTYPE
'set' : TTYPE_ID
}
id {
'[V]' : TTYPE_IDTYPE
'v2' : TTYPE_ID
}
expr {
id {
'[V]' : TTYPE_IDTYPE
'v1' : TTYPE_ID
}
'=' : TTYPE_OPERATOR
'12' : TTYPE_INTEGER
}
}
< /code>
Теперь не заботитесь о типах токенов и токенов, потому что я уже выполнял всю работу над Lexer, который полностью функционален. Моя проблема заключается в представлении блоков (например, Line
, id или expr в примере). Видите ли, я хочу использовать структуры, даже если у меня есть занятия в C ++, только потому, что я считаю их проще в использовании для небольших типов, таких как блоки. Моя первоначальная идея была этой: < /p>
Код: Выделить всё
struct Block {
vector toks; // struct Token owns already a token value and a token type
int type; // indicates if it is an expression, an id...
}
Но если я применяю это к выражениям, это не сработает, потому что в выражениях вы также можете включить идентификаторы, которые также предназначены как блоки, и они не могут быть включены в вектор Toks (тип struct token ). Toks должен содержать все, что составляет блок. Я не совсем уверен, что использую любой тип , и я хотел знать, есть ли у кого -нибудь другой метод для достижения результата, который я хочу (представлен выше), возможно, все еще используя структуры.
Спасибо заранее!
Подробнее здесь:
https://stackoverflow.com/questions/797 ... figure-out