54 lines
1.0 KiB
C
54 lines
1.0 KiB
C
|
//
|
|||
|
// Created by Administrator on 2021/4/30.
|
|||
|
//
|
|||
|
|
|||
|
#ifndef SYNTAXPARSER_ITEM_H
|
|||
|
#define SYNTAXPARSER_ITEM_H
|
|||
|
|
|||
|
#include <stdexcept>
|
|||
|
|
|||
|
#include <Production.h>
|
|||
|
|
|||
|
// <20><>
|
|||
|
class Item{
|
|||
|
// <20><>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ʽ
|
|||
|
const Production* const production;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
int dot_index = 0;
|
|||
|
|
|||
|
const int terminator = 0;
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
const bool generated = false;
|
|||
|
|
|||
|
explicit Item(const Production *p_pdt, int m_terminator, bool m_generated = false)
|
|||
|
: production(p_pdt), terminator(m_terminator), generated(m_generated) {}
|
|||
|
|
|||
|
void set_dot_index(int m_dot_index);
|
|||
|
|
|||
|
[[nodiscard]] int get_dot_index() const {
|
|||
|
return dot_index;
|
|||
|
}
|
|||
|
|
|||
|
[[nodiscard]] size_t get_right_size() {
|
|||
|
return production->right.size();
|
|||
|
}
|
|||
|
|
|||
|
int get_dot_next_symbol() const;
|
|||
|
|
|||
|
int get_dot_next_i_symbol(int i) const;
|
|||
|
|
|||
|
[[nodiscard]] int get_terminator() const {
|
|||
|
return terminator;
|
|||
|
}
|
|||
|
|
|||
|
[[nodiscard]] const Production *get_production() const {
|
|||
|
return production;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
#endif //SYNTAXPARSER_ITEM_H
|