lexer freezes on this Python code
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- javascript, python
- Domínio
- compilers
Direção de pesquisa
Comece reproduzindo o congelamento com lexer("print('\'m')") e inspecione a função lexer, especialmente o loop matchQuotation mostrado na issue. Rastreie como as aspas escapadas são tokenizadas e certifique-se de que essa entrada termine sem avançar além do fim da entrada; verifique se o lexer não trava mais.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Steps to reproduce:
- Try to run
lexer("print('\'m')") - Notice that it freezes.
I traced the freeze to an infinite do-while loop in the lexer.
In the following code, input is set to the code "print('\'m')" but current variable reaches into the billions,
currentChar === undefined, and
validator.test(currentChar) is returning false when currentChar is undefined.
/**
* 过滤(提取) 引号中的内容
*/
// eslint-disable-next-line
const matchQuotation = (currentChar, validator, TokenType) => {
do {
if (currentChar === '\n') {
line++;
}
currentChar = input[++current];
} while (!validator.test(currentChar));
++current;
};
I wonder if this has anything to do with the backslashed quotation mark. Maybe the grammar doesn't define STRING properly for escaped quotes.
I edited this issue because I first thought the bug was reproducible by parsing but it actually requires running the lexer function on the code.
- Linguagem predominante
- JavaScript
- Estrelas
- 25
- Forks
- 7
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de DTStack/dt-python-parser
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 48/100
DTStack/dt-python-parser#28 ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
DTStack/dt-python-parser#27 · 1 comentário ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 45/100
DTStack/dt-python-parser#26 ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 15/100
DTStack/dt-python-parser#15 · 3 comentários ·
-
支持最新版Python3语法 Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
DTStack/dt-python-parser#11 ·
Todas as issues de DTStack/dt-python-parser
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
palladius/rails8-app-on-gcp#145 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
dotenvx/dotenv-vscode#139 ·
-
test-change-proposal
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
web-platform-tests/interop#1455 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
corsairdev/corsair#1764 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100