Я пишу анализатор в C ++ для своего языка программирования, но я не понимаю, как представлять токеновые деревья [закрытоC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Я пишу анализатор в C ++ для своего языка программирования, но я не понимаю, как представлять токеновые деревья [закрыто

Сообщение Anonymous »

Я хочу создать анализатор в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»